首页 > 解决方案 > 如何在 R 中的 list() 上执行嵌套循环?

问题描述

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

> L
[[1]]
[1] 0.6876619 0.7847888 0.6377801 0.2078056 0.8981001

[[2]]
[1] 0.9358160 0.8905056 0.7715877 0.8648426 0.4915060

[[3]]
[1] 0.88095630 0.08010288 0.15140700 0.35400865 0.60317717

[[4]]
[1] 0.07436267 0.85873209 0.49881141 0.92363954 0.87208334

我想找到每对向量之间的相关系数,例如cor(L[[i]],L[[j]])。有什么解决方案可以通过apply家庭功能执行它吗?请把它作为一个一般问题的具体案例:如果我们需要在 R 中的 List() 上做一个三重嵌套循环怎么办?

标签: rlist

解决方案


您可以嵌套lapply调用:

lapply(L, function(x) lapply(L, function(y) cor(x,y))))

如果您想要更好地呈现结果,请将它们放入矩阵中:

    L <- list(rnorm(10), rnorm(10), rnorm(10))
    matrix(unlist(lapply(L, 
                         function(x) lapply(L, 
                                            function(y) cor(x,y)))),
           length(L))
#>            [,1]       [,2]       [,3]
#> [1,]  1.0000000 -0.3880931 -0.4164212
#> [2,] -0.3880931  1.0000000  0.4158335
#> [3,] -0.4164212  0.4158335  1.0000000

reprex 包于 2021-05-31 创建 (v2.0.0 )


推荐阅读