首页 > 解决方案 > 如何使用 rapply 提取深度嵌套列表中的特定子级别?

问题描述

从一堆列表中,我想提取两个向量c并将它们提取prbind一个矩阵中。

列表如下所示:

List of 10
 $ :List of 2
  ..$  :List of 3
  .. ..$ c : int [1:2] 1 5
  .. ..$ x1: num [1:10] -0.565 0.363 0.633 0.404 -0.106 ...
  .. ..$ x2: num [1:10] 2.287 -1.389 -0.279 -0.133 0.636 ...
  ..$ p: int [1:10] 6 8 4 9 10 2 1 7 5 3
 $ :List of 2
  ..$  :List of 3
  .. ..$ c : int [1:2] 8 2
  [...]

ps很简单,

do.call(rbind, sapply(L, "[", 2))
#   [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
# p    6    8    4    9   10    2    1    7    5     3
# p    5    6    2    8    1    7    9   10    3     4
# p   10    8    1    3    9    5    6    7    4     2
# ...

sapply但是这种方法使我对cs加倍,

do.call(rbind, sapply(sapply(L, `[`, 1), `[`, 1))
#   [,1] [,2]
# c    1    5
# c    8    2
# ...

并且可能有一种更有效的方法来做到这一点。

现在我很困惑,rapply无法弄清楚如何进入第二个子级别。在寻找?`[`合适的论据后,我才发现i

rapply(L, `[`, i=2, how="list")

但这会将我的子列表修剪为它们的第一个元素。

用 来代替 doublesapply可能rapply吗?如何?或者也许还有另一种更有效的基础 R 解决方案?

顺便说一句,在那之后我想申请colMeans

数据

set.seed(42)
L <- replicate(10, list(list(c=sample(10, 2), x1=rnorm(10), x2=rnorm(10)), 
                        p=sample(10, 10)), simplify=FALSE)

标签: rlistextract

解决方案


推荐阅读