如何用Filter与lapply过滤R嵌套列表并提取目标数据?
嵌套列表数据提取与过滤问题
这是之前问题的后续提问,我在使用Filter和lapply函数提取所需数据时遇到困难,现有嵌套列表数据(节选)如下:
result <- list( list( startSize = 2, method = "pa", list(time = 0.0016831, pk = c(1, 0), ij = c(10, 0, 0, 0, 0, 0)), list(time = 0.0002714, pk = c(1.1), ij = c(0)), list(time = 5.26e-05, pk = c(), ij = c()) ), list( startSize = 2, method = "pa", list(time = 0.0004191, pk = c(2, 0), ij = c(22, 0, 0, 0, 0, 0)), list(time = 0.0002401, pk = c(0.5, 1.2), ij = c(0)), list(time = 5.28e-05, pk = c(), ij = c()) ), list( startSize = 4, method = "pnb", list(time = 0.0009156, pk = c(3, 0, 0, 0), ij = c(33, 0, 0, 0,0, 0)), list(time = 0.0010072, pk = c(4, 0, 0, 0), ij = c(44, 0, 0, 0.25, 0, 0, 0, 0, 0, 0.25, 0, 0, 0, 0, 0, 0)), list(time = 0.0005579, pk = c(5, 0), ij = c(55, 0.0625, 0.0625, 0.0625, 0.0625, 0)) ), list( startSize = 4, method = "pnb", list(time = 0.0009364, pk = c(6, 0, 0, 0), ij = c(66, 0, 0, 0, 0, 0)), list(time = 0.0023319, pk = c(7, 0, 0, 0), ij = c(77, 0, 0, 0, 0.25, 0, 0, 0.25, 0, 0, 0.33, 0.25, 0, 0, 0, 0, 0, 0)), list(time = 0.0013074, pk = c(8, 0), ij = c(8.8, 0.0625, 0.0625, 0.0625, 0.0625, 0)) ) )
该列表包含4个嵌套子列表,有2种不同的startSize(2/4)、2种不同的method(pa、pnb),每种实验重复2次。每个实验包含3次迭代,记录了time以及两个向量pk和ij。
基于之前的回答,我尝试编写过滤函数简化操作,例如:
myFilterFunction1 <- function(mylist, size, meth) { return(mylist["startSize"] == size && mylist["method"] == meth) }
或
myFilterFunction2 <- function(mylist, size, meth) { return Filter(function(z) z["startSize"] == size && z["method"] == meth, mylist) }
但两个函数均报错,错误信息:'list' object cannot be coerced to type 'double',导致无法继续使用lapply处理数据。
我需要提取以下三类结果:
1. 时间矩阵
当startSize=2、method="pa"时,得到如下矩阵:
| times | ,1 | ,2 | ,3 |
|---|---|---|---|
| 1, | 0.0016831 | 0.0002714 | 5.26e-05 |
| 2, | 0.0004191 | 0.0002401 | 5.28e-05 |
2. 向量长度矩阵
针对pk向量,当startSize=2、method="pa"时,得到如下矩阵:
| length(pk) | ,1 | ,2 | ,3 |
|---|---|---|---|
| 1, | 2 | 1 | 0 |
| 2, | 2 | 2 | 0 |
3. 按迭代合并的向量
针对pk向量,当startSize=2、method="pa"时,得到如下向量:
c(1, 0, 2, 0), c(1.1, 0.5, 1.2), c()
我感觉离解决问题很近,但过去7小时都没能成功,希望能得到帮助!
内容的提问来源于stack exchange,提问作者Markstar
相关产品推荐
相关产品推荐

