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 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.