On Sun, Sep 23, 2018 at 2:26 PM Wensui Liu <liuwen...@gmail.com> wrote: > > 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'm pretty sure you do not know what you are 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? You are giving bad and confused advice. Please stop doing that. --Ista > 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.