r - 如何使用 rapply 提取深度嵌套列表中的特定子级别?
问题描述
从一堆列表中,我想提取两个向量c
并将它们提取p
到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
s很简单,
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
s加倍,
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)
解决方案
推荐阅读
- ruby - 使用 Dir.chdir 处理带有空格的路径名
- python - 在用户模型之外散列密码字段 - Django
- python - 如何在while循环python中从每个循环中收集信息
- javascript - 在Javascript中递归创建选择菜单
- python - 刷新网络应用程序会导致删除的文件重新出现(烧瓶)
- python - 数据框列的单独值计数
- javascript - 试图阻止 Yup 表单验证接受 -0 作为正整数
- pytest - 导入 pytest 后出现错误
- python - 如何在python中随机分配治疗组?
- pygame - Spyder 未检测到 Pygame 模块