[R] sapply puzzlement
Ernest Adrogué i Calveras
nfdisco at gmail.com
Fri Jan 28 01:16:45 CET 2011
Hi,
I have this data.frame with two variables in it,
> z
V1 V2
1 10 8
2 NA 18
3 9 7
4 3 NA
5 NA 10
6 11 12
7 13 9
8 12 11
and a vector of means,
> means <- apply(z, 2, function (col) mean(na.omit(col)))
> means
V1 V2
9.666667 10.714286
My intention was substracting means from z, so instictively I tried
> z-means
V1 V2
1 0.3333333 -1.6666667
2 NA 7.2857143
3 -0.6666667 -2.6666667
4 -7.7142857 NA
5 NA 0.3333333
6 0.2857143 1.2857143
7 3.3333333 -0.6666667
8 1.2857143 0.2857143
But this is completely wrong. sapply() gives the same result:
> sapply(z, function(row) row - means)
V1 V2
[1,] 0.3333333 -1.6666667
[2,] NA 7.2857143
[3,] -0.6666667 -2.6666667
[4,] -7.7142857 NA
[5,] NA 0.3333333
[6,] 0.2857143 1.2857143
[7,] 3.3333333 -0.6666667
[8,] 1.2857143 0.2857143
So, what is going on here?
The following appears to work
> z-matrix(means,ncol=2)[rep(1, dim(z)[1]),]
V1 V2
1 0.3333333 -2.7142857
2 NA 7.2857143
3 -0.6666667 -3.7142857
4 -6.6666667 NA
5 NA -0.7142857
6 1.3333333 1.2857143
7 3.3333333 -1.7142857
8 2.3333333 0.2857143
but I think it's rather cumbersome, surely there must be a cleaner way
to do it.
--
Ernest
More information about the R-help
mailing list