【发布时间】:2013-11-07 22:31:21
【问题描述】:
假设我有一个集合 N={1,2,3},那么我们可以列出它的所有 7 个非空子集。
n=3 # number of elements in a set
a=2^n-1 # number of non-empty subsets for that set
subsets=lapply(1:n, function(x) combn(n, x)) # list all the non-empty subest
subsets
现在我想将这些子集放入一个矩阵并组织如下:
if n=3 or in an index matrix:
1 0 0 1 0 0
0 2 0 0 1 0
0 0 3 0 0 1
1 2 0 1 1 0
1 0 3 1 0 1
0 2 3 0 1 1
1 2 3 1 1 1
任何人都知道如何编写可以轻松扩展到任意 n (=4, 5, 6...) 的代码吗?我试过这个:
subindex=matrix(c(0), nrow=a, ncol=n)
i=1
while(i<=a){
j=n
b=2^(n-1)
N=i
while(N>0){
if(b<=N) {subindex[i,j]=1}&{N=N-b}
b=trunc(b/2)
j=j-1
}
i=i+1
}
subindex
但是我得到的索引矩阵在第 3 行和第 4 行是错误的。如果 n=4,那么会有更多错误...有人可以纠正这个或简化这个代码吗?或者只是编写一个全新的代码。真的很感激。
【问题讨论】:
-
downvote 似乎有点不合理,不是吗?
-
是的。我想我是在高速公路上偶然做的。它不会让我现在扭转它。
标签: r matrix while-loop subset