>>>>> Wensui Liu >>>>> on Sun, 23 Sep 2018 13:26:32 -0500 writes:
> what you measures is the "elapsed" time in the default > setting. you might need to take a closer look at the > beautiful benchmark() function and see what time I am > talking about. > I just provided tentative solution for the person asking > for it and believe he has enough wisdom to decide what's > best. why bother to judge others subjectively? Well, because Ista Zahn is much much much better R programmer than you, sorry to be blunt! Martin > On Sun, Sep 23, 2018 at 1:18 PM Ista Zahn <istaz...@gmail.com> > wrote: >> >> 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. ______________________________________________ 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.