我有一个通过以下方式获得的子集列表:
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个)来提取它。
答案 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