In situations where you don't want apply() to try to construct a matrix from your results, you can wrap the results in a list, to force apply() to return just a list of results, e.g. (the outer "lapply()" strips off an unnecessary level of list depth):
> b2 <- lapply(apply (a, 1, function(x) list(table(x))), "[[", 1) > length(b2) [1] 4 > b2[[1]] x 1 2 6 7 2 1 1 1 > attributes(b2[[1]]) $dim [1] 4
$dimnames $dimnames$x [1] "1" "2" "6" "7"
$class [1] "table"
Your particular case might benefit from more information given to table, which allows it to provide results in a more uniform format, e.g.:
> b1 <- apply (a, 1, function(x) table(factor(x, levels=0:9))) > b1 [,1] [,2] [,3] [,4] 0 0 1 0 0 1 2 1 1 2 2 1 0 0 1 3 0 1 0 0 4 0 2 2 0 5 0 0 1 1 6 1 0 0 1 7 1 0 0 0 8 0 0 1 0 9 0 0 0 0 >
hope this helps,
Tony Plate
At Tuesday 10:42 AM 8/24/2004, [EMAIL PROTECTED] wrote:
a <- matrix (c( 7, 1, 1, 2, 6, 3, 4, 0, 1, 4, 5, 1, 8, 4, 4, 6, 1, 1, 2, 5), nrow=4, byrow=TRUE)
b <- apply (a, 1, table)
"apply" documentation says clearly that if the rows of the result of FUN are the same length, then an array will be returned. And column-major would be the appropriate order in R. But "b" above is pretty opaque compared to what one would expect, and what one would get from "apply ( , , table)" if the rows were not of equal length. One needs to do something like
n <- matrix (apply (a, 1, function (x) unique (sort (x))), nrow=nrow(a))
to get the corresponding "names" of "b" to figure out the counts.
Denis White
______________________________________________ [EMAIL PROTECTED] mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
______________________________________________ [EMAIL PROTECTED] mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html