From: Thomas Lumley <tlumley at u.washington.edu>
To: Zhen Pang <nusbj at hotmail.com>
CC: r-help at stat.math.ethz.ch
Subject: Re: [R] sapply and loop
Date: Mon, 18 Oct 2004 09:14:49 -0700 (PDT)
On Sat, 16 Oct 2004, Zhen Pang wrote:
Dear all,
I am doing 200 times simulation. For each time, I generate a matrix and
define some function on this matrix to get a 6 dimension vector as my
results.
As the loop should be slow, I generate 200 matrice first, and save them
into a list named ma,
then I define zz<-sapply(ma, myfunction)
To my surprise, It almost costs me the same time to get my results if I
directly use a loop from 1 to 200. Is it common? Can I improve any
further?
It is quite common for a loop to be as fast as sapply(). After all,
sapply() still has to run `myfunction' 200 times, and this is what takes
most of the time, so there isn't any obvious reason why sapply() should be
much faster. sapply() and lapply() certainly can be faster than loops, but
usually not by very much.
The surprising fact is that so many people *believe* the apply() functions
are typically much faster than loops. It's probably a useful belief, since
it encourages people to learn to use them (and they sometimes are faster).
You should try using Rprof() to find out which parts of your code are slow.
-thomas