In current versions of R the apply functions do not gain much (if any) in speed over a well written for loop (the for loops are much more efficient than they used to be).
Using global variables could actually slow things down a little for what you are doing, if you use `<<-` then it has to search through multiple environments to find which to replace. In general you should avoid using global variables. It is best to pass all needed variables into a function as arguments, do any modifications internally inside the function on local copies, then return the modified local copy from the function (you can use a list if you want to return multiple variables). Since each iteration of your code depends on the previous iteration, vectorizing is not going to help (or even be reasonable). If you want to speed up the code then you might consider a compiled option, see the inline or rcpp packages (or others). On Thu, Dec 27, 2012 at 1:38 PM, Sam Steingold <s...@gnu.org> wrote: > I have the following code: > > --8<---------------cut here---------------start------------->8--- > d <- rep(10,10) > for (i in 1:100) { > a <- sample.int(length(d), size = 2) > if (d[a[1]] >= 1) { > d[a[1]] <- d[a[1]] - 1 > d[a[2]] <- d[a[2]] + 1 > } > } > --8<---------------cut here---------------end--------------->8--- > > it does what I want, i.e., modified vector d 100 times. > > Now, if I want to repeat this 1e6 times instead of 1e2 times, I want to > vectorize it for speed, so I do this: > > --8<---------------cut here---------------start------------->8--- > update <- function (i) { > a <- sample.int(n.agents, size = 2) > if (d[a[1]] >= delta) { > d[a[1]] <- d[a[1]] - 1 > d[a[2]] <- d[a[2]] + 1 > } > entropy(d, unit="log2") > } > system.time(entropy.history <- sapply(1:1e6,update)) > --8<---------------cut here---------------end--------------->8--- > > however, the global d is not modified, apparently update modifies the > local copy. > > so, > 1. is there a way for a function to modify a global variable? > 2. how would you vectorize this loop? > > thanks! > > -- > Sam Steingold (http://sds.podval.org/) on Ubuntu 12.04 (precise) X > 11.0.11103000 > http://www.childpsy.net/ http://honestreporting.com > http://pmw.org.il http://www.PetitionOnline.com/tap12009/ > A number problem "solved" with floats turns into 1.9999999999999998 > problems. > > ______________________________________________ > 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. > -- Gregory (Greg) L. Snow Ph.D. 538...@gmail.com [[alternative HTML version deleted]] ______________________________________________ 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.