x <- list(l1=list(1:4),l2=list(2:5),l3=list(3:8))
我知道[]
用于提取多个元素,[[]]
用于提取列表中列表中的单个元素。我需要帮助提取另一个列表中的列表中的多个元素。例如,我需要从另一个列表中的列表l1中提取1,3?
答案 0 :(得分:1)
有关详细信息,请参阅help(Extract)
,其中包含[[
和[
[[
运算符可以通过提供名称 OR 索引(路径)的向量,在一个步骤中遍历/搜索嵌套列表:
> y = list(a=list(b=1))
> y[[c("a","b")]]
[1] 1
> y[[c(1,1)]]
[1] 1
您无法混合名称和索引:
> y[[c("a",1)]]
NULL
您似乎在问一个不同的问题,因为您的内部列表未命名。
这是一个仅使用数字索引的解决方案:
> x[[c(1,1)]]
[1] 1 2 3 4
> x[[c(1,1)]][c(1,3)]
[1] 1 3
第一个获取第一个列表的第一个元素。第二个展开它以展示内部的矢量。
如果你的真实用例涉及更复杂的路径,这可能会有用,但为了避免让其他程序员感到惊讶,在给定的例子中如下......
x[["l1"]][[1]][c(1,3)]
......可能更可取。第二个1打开列表。
在您的情况下,以下内容也是等效的
unlist(x[["l1"]])[c(1,3)]
答案 1 :(得分:0)
听起来就像您可能有兴趣探索rapply
函数一样(递归lapply
)。
如果我理解你的问题,你可以这样做:
rapply(x[["l1"]], f=`[`, ...=c(1, 3))
# [1] 1 3
与以下内容略有不同:
lapply(x[["l1"]], `[`, c(1, 3))
# [[1]]
# [1] 1 3