[R] Calculating subsets of row pairs using somthing faster than a for loop.

Gabor Grothendieck ggrothendieck at gmail.com
Tue Jul 24 22:15:41 CEST 2007


I doubt its any faster than using a loop but probably less code is:

library(zoo)
z1 <- zoo(t(mat1)); z2 <- zoo(t(mat2))
idx <- 1:ncol(z1)
out <- rollapply(cbind(z1, z2), 11, by.column = FALSE,
    FUN = function(x) cor(x[,idx],x[,-idx]))

will give you a 10 x 16 multivariate zoo series such that:

out[1, ] is c(cor(t(mat1[,1:11]), t(mat2[,1:11])))
out[2, ] is c(cor(t(mat1[,2:12]), t(mat2[,2:12])))
etc.

and t(out) is a matrix in the orientation you asked for.

Try

library(zoo)
vignette("zoo")

for an intro to zoo.


On 7/24/07, Bernzweig, Bruce (Consultant) <bbernzwe at bear.com> wrote:
> Hi all,
>
>
>
> Situation:
>
>
>
>  - I have two matrices each w/ 4 rows and 20 columns.
>
>
>
> mat1 <- matrix(sample(1:500,80), ncol = 20,
>
>            dimnames=list(paste("mat1row", 1:4, sep=""),
>
>            paste("mat1col", 1:20, sep="")))
>
>
>
> mat2 <- matrix(sample(501:1000,80), ncol = 20,
>
>            dimnames=list(paste("mat2row", 1:4, sep=""),
>
>            paste("mat2col", 1:20, sep="")))
>
>
>
>  - Each column represents a value in a time series.
>
>
>
> Q: What do I want:
>
>
>
>   Calculate moving average correlations for each row x row pair:
>
>
>
>   For each row x row pair I want 10 values representing moving average
>
>   correlations for 10 sets of time-values:
>
>
>
>   cor(mat1[1,1:10], mat2[1,1:10])
>
>   cor(mat1[1,2:11], mat2[1,2:11])
>
>   ...
>
>   cor(mat1[1,11:20], mat2[1,11:20])
>
>   cor(mat1[1,1:10], mat2[2,1:10])
>
>   ...
>
>   cor(mat1[4,11:20], mat2[4,11:20])
>
>
>
>   Result would be a 16 (rows) x 10 (col) matrix matMA
>
>
>
>      ma1, ma2, ..., ma10 for (mat1 row1) x (mat2 row1)
>
>      ma1, ma2, ..., ma10 for (mat1 row1) x (mat2 row2)
>
>      ...
>
>      ma1, ma2, ..., ma10 for (mat1 row4) x (mat2 row3)
>
>      ma1, ma2, ..., ma10 for (mat1 row4) x (mat2 row4)
>
>
>
>   I would like to be able to do this without using a for loop
>
>   due to the slowness of that method.
>
>
>
>   Is it possible to iterate through subsets w/o using a for loop?
>
>
>
> Thanks,
>
>
>
> - Bruce
>
>
>
>      P
>
>
>
>
> **********************************************************************
> Please be aware that, notwithstanding the fact that the pers...{{dropped}}
>
>
> ______________________________________________
> R-help at stat.math.ethz.ch 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