Actually x is the variable name since your function returned a vector of three values:
> tbl <- aggregate(warpbreaks[, 1], warpbreaks[, 2:3], function(breaks) c(Min = > min(breaks), + Med = median(breaks), Max = max(breaks))) > str(tbl) 'data.frame': 6 obs. of 3 variables: $ wool : Factor w/ 2 levels "A","B": 1 2 1 2 1 2 $ tension: Factor w/ 3 levels "L","M","H": 1 1 2 2 3 3 $ x : num [1:6, 1:3] 25 14 12 16 10 13 51 29 21 28 ... ..- attr(*, "dimnames")=List of 2 .. ..$ : NULL .. ..$ : chr "Min" "Med" "Max" You have two options. One is to convert the matrix to three separate columns: > tbl2 <- data.frame(tbl[, 1:2], tbl$x) > str(tbl2) 'data.frame': 6 obs. of 5 variables: $ wool : Factor w/ 2 levels "A","B": 1 2 1 2 1 2 $ tension: Factor w/ 3 levels "L","M","H": 1 1 2 2 3 3 $ Min : num 25 14 12 16 10 13 $ Med : num 51 29 21 28 24 17 $ Max : num 70 44 36 42 43 28 > tbl2 wool tension Min Med Max 1 A L 25 51 70 2 B L 14 29 44 3 A M 12 21 36 4 B M 16 28 42 5 A H 10 24 43 6 B H 13 17 28 The other is to change the name of x to something more informative: > names(tbl)[3] <- "breaks" > str(tbl) 'data.frame': 6 obs. of 3 variables: $ wool : Factor w/ 2 levels "A","B": 1 2 1 2 1 2 $ tension: Factor w/ 3 levels "L","M","H": 1 1 2 2 3 3 $ breaks : num [1:6, 1:3] 25 14 12 16 10 13 51 29 21 28 ... ..- attr(*, "dimnames")=List of 2 .. ..$ : NULL .. ..$ : chr "Min" "Med" "Max" > tbl wool tension breaks.Min breaks.Med breaks.Max 1 A L 25 51 70 2 B L 14 29 44 3 A M 12 21 36 4 B M 16 28 42 5 A H 10 24 43 6 B H 13 17 28 ------------------------------------- David L Carlson Department of Anthropology Texas A&M University College Station, TX 77840-4352 -----Original Message----- From: R-help [mailto:r-help-boun...@r-project.org] On Behalf Of Dario Strbenac Sent: Wednesday, September 16, 2015 1:00 AM To: William Dunlap Cc: r-help@R-project.org Subject: Re: [R] by Function Result Factor Levels Good day, Yes, exactly. I found that aggregate is another alternative which doesn't require a package dependency, although the column formatting is less suitable, always prepending x. aggregate(warpbreaks[, 1], warpbreaks[, 2:3], function(breaks) c(Min = min(breaks), Med = median(breaks), Max = max(breaks))) wool tension x.Min x.Med x.Max 1 A L 25 51 70 2 B L 14 29 44 3 A M 12 21 36 4 B M 16 28 42 5 A H 10 24 43 6 B H 13 17 28 -------------------------------------- Dario Strbenac PhD Student University of Sydney Camperdown NSW 2050 Australia ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code. ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.