[R] apply ( , , table)
Tony Plate
tplate at blackmesacapital.com
Tue Aug 24 19:20:03 CEST 2004
apply() tries to be a bit smart about what it does (sometimes maybe too
smart), but it actually is pretty useful a lot of the time. It's extremely
widely used, so changing the behavior is not an option -- changing the
behavior would break a lot of existing code. (Personally, I'd prefer it if
apply() put its dimensions back together in a slightly more intelligent
way, i.e., if apply(x, 1, c) and apply(x, 2, c) returned the same thing,
but apply is how it is.)
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, White.Denis at epamail.epa.gov 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
>
>______________________________________________
>R-help at stat.math.ethz.ch mailing list
>https://stat.ethz.ch/mailman/listinfo/r-help
>PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
More information about the R-help
mailing list