[R] slowness when I use a list comprehension

Gabor Grothendieck ggrothend|eck @end|ng |rom gm@||@com
Sun Jun 16 20:54:26 CEST 2024


This can be vectorized.  Try

ix <- seq_along(vec2)
S_diff2 <- sapply(seq_len(N1-(N2-1)*ratio_sampling), \(j)
sum((vec1[(ix-1)*ratio_sampling+j] - vec2[ix])**2))

On Sun, Jun 16, 2024 at 11:27 AM Laurent Rhelp <laurentRHelp using free.fr> wrote:
>
> Dear RHelp-list,
>
>     I try to use the package comprehenr to replace a for loop by a list
> comprehension.
>
>   I wrote the code but I certainly miss something because it is very
> slower compared to the for loops. May you please explain to me why the
> list comprehension is slower in my case.
>
> Here is my example. I do the calculation of the square difference
> between the values of two vectors vec1 and vec2, the ratio sampling
> between vec1 and vec2 is equal to ratio_sampling. I have to use only the
> 500th value of the first serie before doing the difference with the
> value of the second serie (vec2).
>
> Thank you
>
> Best regards
>
> Laurent
>
> library(tictoc)
> library(comprehenr)
>
> ratio_sampling <- 500
> ## size of the first serie
> N1 <- 70000
> ## size of the second serie
> N2 <- 100
> ## mock data
> set.seed(123)
> vec1 <- rnorm(N1)
> vec2 <- runif(N2)
>
>
> ## 1. with the "for" loops
>
> ## the square differences will be stored in a vector
> S_diff2 <- numeric((N1-(N2-1)*ratio_sampling))
> tic()
> for( j in 1:length(S_diff2)){
>    sum_squares <- 0
>    for( i in 1:length(vec2)){
>      sum_squares = sum_squares + ((vec1[(i-1)*ratio_sampling+j] -
> vec2[i])**2)
>    }
>    S_diff2[j] <- sum_squares
> }
> toc()
> ## 0.22 sec elapsed
> which.max(S_diff2)
> ## 7857
>
> ## 2. with the lists comprehension
> tic()
> S_diff2 <- to_vec(for( j in 1:length(S_diff2)) sum(to_vec(for( i in
> 1:length(vec2)) ((vec1[(i-1)*ratio_sampling+j] - vec2[i])**2))))
> toc()
> ## 25.09 sec elapsed
> which.max(S_diff2)
> ## 7857
>
> ______________________________________________
> R-help using 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.



-- 
Statistics & Software Consulting
GKX Group, GKX Associates Inc.
tel: 1-877-GKX-GROUP
email: ggrothendieck at gmail.com



More information about the R-help mailing list