0

この種の問題を解決する簡単な方法を知らない人がいる場合は、お尋ねしたいと思います: セット B (0,1,2...B) から取得した A 番号のすべての組み合わせを生成する必要があります。合計 = C.

つまりA=2B=3C=2:

この場合の解決策:

(1,1);(0,2);(2,0)

したがって、ベクトルの長さは 2 (A)、そのすべての項目の合計は 2 (C) で、各ベクトル要素の可能な値はセット {0,1,2,3} から取得されます (最大値は B)。

4

3 に答える 3

1

気の利いたpartitions()パッケージ、および、、、および:のより興味深い値AB使用Cする

library(partitions)

A <- 2
B <- 5
C <- 7

comps <- t(compositions(C, A))
ii <- apply(comps, 1, FUN=function(X) all(X %in% 0:B))
comps[ii, ]
#      [,1] [,2]
# [1,]    5    2
# [2,]    4    3
# [3,]    3    4
# [4,]    2    5
于 2012-04-26T20:05:14.977 に答える
1

SOが更新される前にすでに開始して以来の機能バージョン:

A=2
B=3
C=2

myfun <- function(a=A, b=B, c=C) {
  out <- do.call(expand.grid, lapply(1:a, function(x) 0:b))
  return(out[rowSums(out)==c,])
}

> out[rowSums(out)==c,]
  Var1 Var2
3    2    0
6    1    1
9    0    2
于 2012-04-26T19:58:46.700 に答える
1
z <- expand.grid(0:3,0:3)
z[rowSums(z)==2, ]
  Var1 Var2
3    2    0
5    1    1
7    0    2

プログラムでグリッドを展開したい場合は、次のようにします。

z <- expand.grid( rep( list(C), A) )

アイテムが別々のままになるように、リストとして展開する必要があります。rep(0:3, 3)3 つの別個のシーケンスは返されません。したがって、A=3 の場合:

> z <- expand.grid(rep(list(0:3), 3))
> z[rowSums(z)==2, ]
   Var1 Var2 Var3
3     2    0    0
6     1    1    0
9     0    2    0
18    1    0    1
21    0    1    1
33    0    0    2
于 2012-04-26T19:50:03.583 に答える