R works by going down the columns. If you make the rows into columns, it then does what you want. You just have to make the columns back into rows to get the original shape of your matrix.
So the code in one line is : t(t(z) - means) ---- Original message ---- >Date: Fri, 28 Jan 2011 01:16:45 +0100 >From: r-help-boun...@r-project.org (on behalf of nfdi...@gmail.com (Ernest >Adrogué i Calveras)) >Subject: [R] sapply puzzlement >To: r-help@r-project.org > >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 > >______________________________________________ >R-help@r-project.org mailing list >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. -------------------------------------- Dario Strbenac Research Assistant Cancer Epigenetics Garvan Institute of Medical Research Darlinghurst NSW 2010 Australia ______________________________________________ R-help@r-project.org mailing list 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.