我搜索了SO但未找到相关答案。
示例数据:
example.list <- list(list("a",list("b"),list("c")),list("c"))
我想要包含字母&#34; c&#34;的子集列表:
这里获取包含字母&#34; c&#34;:
的最后一个索引节点check.a <- lapply(example.list, function(x) grep("c",x))
我将如何获得上述索引的列表?或者如何获得列表清单?
获得列表c(1,3)的最后节点的一部分存在前面的列表节点c(1,2)。
编辑:所需的输出:(类似这样)
[[1]][[3]]
[[1]][[3]][[1]]
[1] "c"
[[2]]
[[2]][[1]]
[1] "c"
然而,我需要的是还要了解提供的索引,如何获得嵌套列表的子集?请使用check.a
。
编辑2:
以下是可用于对相关列表节点进行子集化的列表索引:
first.list.index <- which(lapply(lapply(example.list, function(x) grep("c",x)),length)>0)
last.list.index <- unlist(lapply(example.list, function(x) grep("c",x)))
这个想法是:(不工作,只是为了证明我之后的事情)
lapply(list(a=first.list.index,b=last.list.index), function(a,b) example.list[[a]][[b]])
编辑3 :(最后编辑)
实际数据如下所示:(我希望通过我提供的索引来解决问题,这就是为什么我减少了这个问题的原因)
[[1]]
[[1]][[1]]
[1] "a"
[[1]][[1]]$data
[[1]][[2]]
[[1]][[2]][[1]]
[1] "b"
[[1]][[1]]$data
[[1]][[3]]
[[1]][[3]][[1]]
[1] "c"
[[1]][[1]]$data
[[2]]
[[2]][[1]]
[1] "c"
[[2]][[1]]$data
对不起这个烂摊子!
这是减少的输入:
list(list(structure(list(name = "a", data = c("21016954")), .Names = c("name", "data"
)), structure(list(name = "b", data = c("17103795")), .Names = c("name", "data")), structure(list(name = "c",
data = c("38036543")), .Names = c("name", "data"))), list(structure(list(name = "c", data = c("42456597")), .Names = c("name","data"))))
答案 0 :(得分:2)
您的第二次修改是在右侧,但您需要使用Map
而不是lapply
。使用您的数据
d <- list(list(structure(list(name = "a", data = c("21016954")), .Names = c("name", "data"
)), structure(list(name = "b", data = c("17103795")), .Names = c("name", "data")), structure(list(name = "c",
data = c("38036543")), .Names = c("name", "data"))), list(structure(list(name = "c", data = c("42456597")), .Names = c("name","data"))))
Map(function(i, j) d[[i]][[j]],
i = which(lapply(lapply(d, function(x) grep("c",x)),length)>0),
j = unlist(lapply(d, function(x) grep("c",x))))
#[[1]]
#[[1]]$name
#[1] "c"
#
#[[1]]$data
#[1] "38036543"
#
#
#[[2]]
#[[2]]$name
#[1] "c"
#
#[[2]]$data
#[1] "42456597"