[R] code optimisation problem

William Dunlap wdunlap at tibco.com
Wed Nov 28 05:45:59 CET 2012


Or try the filter() function (with convolutional filter rep(1/3,3)).

Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com


> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf
> Of cberry at tajo.ucsd.edu
> Sent: Tuesday, November 27, 2012 4:53 PM
> To: r-help at stat.math.ethz.ch
> Subject: Re: [R] code optimisation problem
> 
> Rui Barradas <ruipbarradas at sapo.pt> writes:
> 
> > Hello,
> >
> > Package 'compiler' is good at optimizing for loops. Try the following.
> >
> 
> Or vectorize the function
> 
> > system.time(f1(x,10))
>    user  system elapsed
>    5.01    0.00    5.00
> > system.time(f1.c(x,10))
>    user  system elapsed
>    1.92    0.00    1.91
> > f2 <- function(v,k) diff(cumsum(c(0,v)),lag=k)/k
> > system.time(f2(x,10))
>    user  system elapsed
>    0.11    0.00    0.11
> >
> Chuck
> 
> >
> > #install.packages('compiler')
> > library(compiler)
> > f1.c <- cmpfun(f1)
> >
> > N <- 1e6
> > x <- rnorm(N)
> > system.time(f1(x, 10))
> >    user  system elapsed
> >    6.77    0.06    6.83
> > system.time(f1.c(x, 10))
> >    user  system elapsed
> >    2.57    0.00    2.57
> >
> >
> > Hope this helps,
> >
> > Rui Barradas
> >
> > Em 27-11-2012 21:43, 47 escreveu:
> >> I'd like to write a function that has a vector and a (pos.) number as inputs
> >> and returns what is on the picture below (arithmetic means of (k)
> >> consecutive elements of a given vector). The problem is it works too slow
> >> for long vectors and i know it can be done without "for" loop. However, i've
> >> got no idea how. Can anyone help me with that?
> >>
> >> f1 <- function(v,k) {
> >>    n <- length(v)
> >>    z <- (n-k+1)
> >>    for (i in k:n) {
> >>      v[i-k+1] <- sum(v[(i-k+1):i])
> >>    }
> >>    v <- v[1:(n-k+1)]
> >>    v <- v/k
> >>    return (v)
> >> }
> [...]
> 
> ______________________________________________
> R-help at 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.




More information about the R-help mailing list