如何滑动 R 中 list() 中元素的长度?

How to slide on the length of elements in a list() in R?

假设我在 R 中有这样一个列表:

L <- list(
  c(0.68, 0.78, 0.63, 0.2, 0.89, 0.81),
  c(0.93, 0.89, 0.77, 0.86, 0.49, 0.2),
  c(0.88, 0.08, 0.15, 0.35, 0.6, 0.45),
  c(0.07, 0.85, 0.49, 0.92, 0.87, 0.34)
)

L
[[1]]
[1] 0.68 0.78 0.63 0.20 0.89 0.81

[[2]]
[1] 0.93 0.89 0.77 0.86 0.49 0.20

[[3]]
[1] 0.88 0.08 0.15 0.35 0.60 0.45

[[4]]
[1] 0.07 0.85 0.49 0.92 0.87 0.34

而且我想找到每对向量之间的相关系数,但在多个长度上,例如 cor(L[[i]][1:t],L[[j]][1:t]) t2 to 6 变化而来。有什么解决方案可以用 apply 家庭功能来执行吗?

我们可以使用combn

combn(L, 2, FUN = function(x) lapply(2:6, function(t) 
       cor(x[[1]][seq_len(t)], x[[2]][seq_len(t)])), simplify = FALSE)

如果我们需要matrix输出

combn(L, 2, FUN = function(x) do.call(c, lapply(2:6, 
     function(t) cor(x[[1]][seq_len(t)], x[[2]][seq_len(t)])))) 

-输出

 [,1]        [,2]       [,3]        [,4]        [,5]       [,6]
[1,] -1.0000000 -1.00000000  1.0000000  1.00000000 -1.00000000 -1.0000000
[2,]  0.5765567 -0.26596468  0.6204701  0.63428533 -0.28302468 -0.9210074
[3,]  0.1641508 -0.03795219 -0.4358611  0.63452989 -0.24528496 -0.7680795
[4,] -0.4623420  0.14114454 -0.1512739 -0.09921710 -0.41171957 -0.5675466
[5,] -0.4846004  0.15007699 -0.2377249 -0.09824801  0.08412466 -0.5485821

另一种方式可以是:

a <- sequence(2:6)
b <- cumsum(a==1)
d <- data.frame(L)
e <- lower.tri(diag(length(L)))
do.call(rbind, by(d[a,], b, function(x)cor(x)[e]))

        [,1]        [,2]       [,3]        [,4]        [,5]       [,6]
1 -1.0000000 -1.00000000  1.0000000  1.00000000 -1.00000000 -1.0000000
2  0.5765567 -0.26596468  0.6204701  0.63428533 -0.28302468 -0.9210074
3  0.1641508 -0.03795219 -0.4358611  0.63452989 -0.24528496 -0.7680795
4 -0.4623420  0.14114454 -0.1512739 -0.09921710 -0.41171957 -0.5675466
5 -0.4846004  0.15007699 -0.2377249 -0.09824801  0.08412466 -0.5485821