[R] code optimisation problem

Suzen, Mehmet msuzen at gmail.com
Wed Nov 28 12:07:38 CET 2012


or write the compute intense part in C and interface it to R.

On Wed, Nov 28, 2012 at 5:45 AM, William Dunlap <wdunlap at tibco.com> wrote:
> 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.
>
> ______________________________________________
> 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