Amol Shelat
2010-Nov-20 23:54 UTC
[R] Vectorizing a function that needs to access previous elements of a row
Hi, I'm a newbie when it comes to R, and I'm trying to figure out how to use vectorization as opposed to for loops. In particular, how can I create a function that is applied on each element of a row, but can access previous elements relative to that element? My problem: I want to calculate something like x[i] = x[i] / x[i - 1] for each element of a vector x: ex. x <- data.frame(a = c(1:10)) # incorrect foo = function(y) { y[n] <- y[n] / y[n-1] } div <- lapply(x, foo) Any help would be greatly appreciated. Regards, -Amol Shelat [[alternative HTML version deleted]]
Joshua Wiley
2010-Nov-21 00:01 UTC
[R] Vectorizing a function that needs to access previous elements of a row
Hi Amol, It depends on your exact needs, but one way, assuming you do not need to access previous calculations, only previous elements: x <- 1:10 x[-10] / x[-1] The idea is first create a vector, x, then using negative indices, select the first 9 elements of x (i.e., 1:9) to be divded by the last nine (i.e., 2:10). You are now just passing one vector of length 9 to be divided by another and because division is already vectorized in R, you're done. If you actually wanted to divide through 10, you'd need to make x 1 longer: x <- 1:11, x[-11]/x[-1] HTH, Josh On Sat, Nov 20, 2010 at 3:54 PM, Amol Shelat <shelata at gmail.com> wrote:> Hi, > > I'm a newbie when it comes to R, and I'm trying to figure out how to use > vectorization as opposed to for loops. ?In particular, how can I create a > function that is applied on each element of a row, but can access previous > elements relative to that element? > > My problem: I want to calculate something like x[i] = x[i] / x[i - 1] for > each element of a vector x: > > ex. > > x <- data.frame(a = c(1:10)) > > # incorrect > foo = function(y) { > > y[n] <- y[n] / y[n-1] > > } > > div <- lapply(x, foo) > > Any help would be greatly appreciated. > > Regards, > -Amol Shelat > > ? ? ? ?[[alternative HTML version deleted]] > > ______________________________________________ > R-help at 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. >-- Joshua Wiley Ph.D. Student, Health Psychology University of California, Los Angeles http://www.joshuawiley.com/