如何使用rapply提取深层嵌套列表中的特定子级别?

时间:2019-05-09 15:55:15

标签: r list extract

从一堆列表中,我想将两个向量cp以及rbind都提取到一个矩阵中。

列表如下:

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
  [...]

p很简单,

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的双c

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

,可能有一种更有效的方法。

现在,我对rapply感到困惑,并且不知道如何进入第二级。在?`[`中寻找合适的参数后,我仅发现i

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

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

sapply可以代替双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)

0 个答案:

没有答案