On Sun, Sep 23, 2018 at 1:46 PM Wensui Liu <liuwen...@gmail.com> wrote: > > actually, by the parallel pvec, the user time is a lot shorter. or did > I somewhere miss your invaluable insight? > > > c1 <- 1:1000000 > > len <- length(c1) > > rbenchmark::benchmark(log(c1[-1]/c1[-len]), replications = 100) > test replications elapsed relative user.self sys.self > 1 log(c1[-1]/c1[-len]) 100 4.617 1 4.484 0.133 > user.child sys.child > 1 0 0 > > rbenchmark::benchmark(pvec(1:(len - 1), mc.cores = 4, function(i) log(c1[i > > + 1] / c1[i])), replications = 100) > test > 1 pvec(1:(len - 1), mc.cores = 4, function(i) log(c1[i + 1]/c1[i])) > replications elapsed relative user.self sys.self user.child sys.child > 1 100 9.079 1 2.571 4.138 9.736 8.046
Your output is mangled in my email, but on my system your pvec approach takes more than twice as long: c1 <- 1:1000000 len <- length(c1) library(parallel) library(rbenchmark) regular <- function() log(c1[-1]/c1[-len]) iterate.parallel <- function() { pvec(1:(len - 1), mc.cores = 4, function(i) log(c1[i + 1] / c1[i])) } benchmark(regular(), iterate.parallel(), replications = 100, columns = c("test", "elapsed", "relative")) ## test elapsed relative ## 2 iterate.parallel() 7.517 2.482 ## 1 regular() 3.028 1.000 Honestly, just use log(c1[-1]/c1[-len]). The code is simple and easy to understand and it runs pretty fast. There is usually no reason to make it more complicated. --Ista > On Sun, Sep 23, 2018 at 12:33 PM Ista Zahn <istaz...@gmail.com> wrote: > > > > On Sun, Sep 23, 2018 at 10:09 AM Wensui Liu <liuwen...@gmail.com> wrote: > > > > > > Why? > > > > The operations required for this algorithm are vectorized, as are most > > operations in R. There is no need to iterate through each element. > > Using Vectorize to achieve the iteration is no better than using > > *apply or a for-loop, and betrays the same basic lack of insight into > > basic principles of programming in R. > > > > And/or, if you want a more practical reason: > > > > > c1 <- 1:1000000 > > > len <- 1000000 > > > system.time( s1 <- log(c1[-1]/c1[-len])) > > user system elapsed > > 0.031 0.004 0.035 > > > system.time(s2 <- Vectorize(function(i) log(c1[i + 1] / c1[i])) (1:len)) > > user system elapsed > > 1.258 0.022 1.282 > > > > Best, > > Ista > > > > > > > > On Sun, Sep 23, 2018 at 7:54 AM Ista Zahn <istaz...@gmail.com> wrote: > > >> > > >> On Sat, Sep 22, 2018 at 9:06 PM Wensui Liu <liuwen...@gmail.com> wrote: > > >> > > > >> > or this one: > > >> > > > >> > (Vectorize(function(i) log(c1[i + 1] / c1[i])) (1:len)) > > >> > > >> Oh dear god no. > > >> > > >> > > > >> > On Sat, Sep 22, 2018 at 4:16 PM rsherry8 <rsher...@comcast.net> wrote: > > >> > > > > >> > > > > >> > > It is my impression that good R programmers make very little use of > > >> > > the > > >> > > for statement. Please consider the following > > >> > > R statement: > > >> > > for( i in 1:(len-1) ) s[i] = log(c1[i+1]/c1[i], base = > > >> > > exp(1) ) > > >> > > One problem I have found with this statement is that s must exist > > >> > > before > > >> > > the statement is run. Can it be written without using a for > > >> > > loop? Would that be better? > > >> > > > > >> > > Thanks, > > >> > > Bob > > >> > > > > >> > > ______________________________________________ > > >> > > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see > > >> > > 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. > > >> > > > >> > ______________________________________________ > > >> > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see > > >> > 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. ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see 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.