我有2个名单:
c1 <- c("e","f","g","h")
c2 <- c("j","k","l","m")
list1 <- list(c1,c2)
i1 <- c(1,3)
i2 <- c(2,4)
list2 <- list(i1,i2)
我想基于列表b中的整数向量来对列表a中的字符向量进行子集化。这样我最终会得到一个包含c1(只有e和g)和c2(只有k和m)的新列表(list3)。我目前正在研究plyr的可能性,因此解决方案最好应与plyr一起使用。我尝试了类似的东西,但没有用。
list3 <- llply(list1, function (x) x[list2])
答案 0 :(得分:4)
您可以使用base R
尝试使用Map
,这比llply
更紧凑。基本上,您有两个列表元素具有相同数量的列表,并希望基于(“list2”)的索引列表元素将第一个列表(“list1”)的每个列表元素子集一个。 Map
将使用[
Map(`[`, list1, list2)
与
相同Map(function(x,y) x[y], list1, list2)
或使用llply
中的plyr
(您实际上并不需要llply
)。这可以通过lapply
本身来实现。关键是比较两个列表的相应元素以及可以链接两者(当它们具有相同元素时)的可能方式是使用seq_along
,这将获得一个列表中的元素序列({{1} })并使用该索引获取列表和子集的相应元素。
1:3