我想生成一个列表,其中包含R中数字1:N的所有2 ^ n个子集。 怎么可能?
expand.grid( rep( list( 0:4), 2))
返回一个包含0:4大小为2的所有子集的数据框 - 但我想要一个列表,其中包含所有大小的所有子集。
答案 0 :(得分:10)
怎么样,
lapply(0:4, function(x) combn(4,x))
[[1]]
[,1]
[[2]]
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[[3]]
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 1 1 2 2 3
[2,] 2 3 4 3 4 4
[[4]]
[,1] [,2] [,3] [,4]
[1,] 1 1 1 2
[2,] 2 2 3 3
[3,] 3 4 4 4
[[5]]
[,1]
[1,] 1
[2,] 2
[3,] 3
[4,] 4
答案 1 :(得分:6)
包集中有一个set_power
函数,它应该返回幂集,这是你的单词描述的正确术语。但是,您可能希望修改术语,因为您的代码正在执行不同的操作。 expand.grid
不返回数学集,而是返回有序组合。在集理论中,{1,1}简化为{1}。在这种意义上,展开网格不会创建真正的集合。如果你想要expand.grid可以制作的长度为4的所有data.frames列表,你可以通过以下方式轻松搞定:
lapply(0:4, function(n) expand.grid( rep( list( 0:4), n)) )