2

セット 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 の場合、さらにエラーがあります... 誰かがこれを修正したり、このコードを単純化したりできますか? またはまったく新しいコードを書くだけです。本当に感謝しています。

4

1 に答える 1