lapply:提取特定元素

时间:2015-02-04 15:53:55

标签: r

我有一个通过以下方式获得的子集列表:

lapply(1:5, function(x) combn(5,x))

我想从此列表中提取特定的向量。例如,此列表的第16个元素,即(1,2,3)。任何提示?感谢。

该命令生成(1,2,3,4,5)的所有子集,这是2 ^ 5 = 32个子集的列表。第16位是(1,2,3)。我想知道如何通过使用它的位置(第16个)来提取它。

2 个答案:

答案 0 :(得分:2)

我们可以尝试将矩阵(split)拆分为每个列表元素的向量列表,连接c输出以展平列表,使用数字索引连接子集。

 lst2 <- do.call(`c`,lapply(lst, function(x) split(x, col(x))))
 lst2[[16]]
 #[1] 1 2 3

或者不是拆分矩阵输出,我们可以使用FUN中的combn参数创建list,然后使用c连接do.call

 lst <- do.call(`c`,lapply(1:5, function(x) combn(5, x, FUN=list)))
 lst[[16]]
 #[1] 1 2 3

或者代替do.call( c ,..),我们可以使用(由@Marat Talipov提供)

  lst <- unlist(lapply(1:5, function(x) 
            combn(5, x, FUN=list)), recursive=FALSE)

数据

 lst <- lapply(1:5, function(x) combn(5,x))

答案 1 :(得分:1)

我宁愿考虑生成正确的数据而不是再次循环它们:)

lst = Reduce('c', lapply(1:5, function(x) as.list(data.frame(combn(5,x)))))
> lst[[16]]
[1] 1 2 3