Dear R users
I have a 4-dimensional matrix (actually several 3d (x,y, slices)
matrices appended over time (volumes))
say, e.g. I want to z-transform the data (subtract the mean and divide
by the std-deviation)
for (slice in 1:slices) {
for (x in 1:x.dim) {
for (y in 1:y.dim) {
t <- as.matrix(my.matrix[x,y,slice,1:volumes])
for (vol in 1:volumes) {
my.matrix.transformed[x,y,slice,vol] <-
(my.matrix[x,y,slice,vol] - mean(t))/sqrt(var(t))
}
}
}
}
how can I vectorize such a function using, one of the *apply functions?
many thanks
Cheers
Christoph
Hallo Christoph! Using apply and sweep. Both of them accept as the second argument (MARGIN) a vector which specifies the dimension. ?apply ?sweep. To specify the subscripts accurately I always need some trials, and to run tests, so I cant you provide with the final solution. Hope it helps anyway. Sincerely Eryk. *********** REPLY SEPARATOR *********** On 7/20/2004 at 11:31 AM Christoph Lehmann wrote:>>>Dear R users >>> >>>I have a 4-dimensional matrix (actually several 3d (x,y, slices) >>>matrices appended over time (volumes)) >>> >>>say, e.g. I want to z-transform the data (subtract the mean and divide >>>by the std-deviation) >>> >>>for (slice in 1:slices) { >>> for (x in 1:x.dim) { >>> for (y in 1:y.dim) { >>> t <- as.matrix(my.matrix[x,y,slice,1:volumes]) >>> for (vol in 1:volumes) { >>> my.matrix.transformed[x,y,slice,vol] <- >>>(my.matrix[x,y,slice,vol] - mean(t))/sqrt(var(t)) >>> } >>> } >>> } >>>} >>> >>>how can I vectorize such a function using, one of the *apply functions? >>> >>>many thanks >>> >>>Cheers >>> >>>Christoph >>> >>>______________________________________________ >>>R-help at stat.math.ethz.ch mailing list >>>https://www.stat.math.ethz.ch/mailman/listinfo/r-help >>>PLEASE do read the posting guide! http://www.R-project.org/posting-guide.htmlDipl. bio-chem. Eryk Witold Wolski @ MPI-Moleculare Genetic Ihnestrasse 63-73 14195 Berlin 'v' tel: 0049-30-83875219 / \ mail: wolski at molgen.mpg.de ---W-W---- http://www.molgen.mpg.de/~wolski
I think this should do: z <- apply(my.matrix, 1:3, scale) z <- aperm(z, c(2:4, 1)) Andy> From: Christoph Lehmann > > Dear R users > > I have a 4-dimensional matrix (actually several 3d (x,y, slices) > matrices appended over time (volumes)) > > say, e.g. I want to z-transform the data (subtract the mean > and divide > by the std-deviation) > > for (slice in 1:slices) { > for (x in 1:x.dim) { > for (y in 1:y.dim) { > t <- as.matrix(my.matrix[x,y,slice,1:volumes]) > for (vol in 1:volumes) { > my.matrix.transformed[x,y,slice,vol] <- > (my.matrix[x,y,slice,vol] - mean(t))/sqrt(var(t)) > } > } > } > } > > how can I vectorize such a function using, one of the *apply > functions? > > many thanks > > Cheers > > Christoph > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://www.stat.math.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! > http://www.R-project.org/posting-guide.html > >