On Fri, Jun 15, 2012 at 02:08:13PM +0200, Petr Savicky wrote: > On Fri, Jun 15, 2012 at 11:27:44AM +0000, Schumacher, G. wrote: > > Dear subscribers, > > > > I have made a simulation using loops rather than apply, simply because the > > loop function seems more natural to me. However, the current simulation > > takes forever and I have decided - finally - to learn how to use apply, but > > - as many other people before me - I am having a hard time changing habits. > > My current problem is: > > > > My current code for the loop is: > > distances <- matrix(NA, 1000, 5) > > distancer <- function(x, y){-(abs(x-y))} > > x <- as.matrix(rnorm(1000, 5, 1.67)) > > y <- rnorm(5, 5, 1.67) > > > > for (v in 1:1000){ > > distances[v,] <- distancer(x[v,], y) > > } > > > > The goal is to calculate the distances between the preferences of each > > voter (X) and all parties (Y). This gives a 1000 by 5 matrix (distances). > > > > If I want to transform this to apply, what would be the best way to go? > > More specifically, I am not sure what to put into the X part of the apply > > function. > [...] > > Apply uses a loop internally, so it need not significantly improve efficiency.
Hi. Let me include an example of the situation, when a vectorized code is more efficient than a code using apply(), although the apply() code is significantly simpler. n <- 10000 x <- matrix(runif(3*n), nrow=n, ncol=3) t1 <- system.time( { y <- t(apply(x, 1, sort)) } ) # use a vectorized bubble sort, which is efficient on 3 elements t2 <- system.time( { x[, 1:2] <- cbind(pmin(x[, 1], x[, 2]), pmax(x[, 1], x[, 2])) x[, 2:3] <- cbind(pmin(x[, 2], x[, 3]), pmax(x[, 2], x[, 3])) x[, 1:2] <- cbind(pmin(x[, 1], x[, 2]), pmax(x[, 1], x[, 2])) } ) print(identical(x, y)) [1] TRUE print(rbind(t1, t2)) user.self sys.self elapsed user.child sys.child t1 0.478 0 0.477 0 0 t2 0.004 0 0.004 0 0 Hope this helps. Petr Savicky. ______________________________________________ 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.