如何在R中将所有子集设置为N.

时间:2012-01-23 13:54:12

标签: r

我想生成一个列表,其中包含R中数字1:N的所有2 ^ n个子集。 怎么可能?

expand.grid( rep( list( 0:4), 2))

返回一个包含0:4大小为2的所有子集的数据框 - 但我想要一个列表,其中包含所有大小的所有子集。

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)) )