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.
______________________________________________
[email protected] 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.