-5

したがって、次のコマンドは、必要な長さ y のすべての可能な組み合わせをリストに格納することを知っていますy < j

 lapply(y, function(x) combn(j,x))

しかし、後でそれらに一度だけアクセスするので、それらをメモリに保存するのは効率的ではないため、それらすべてをリストに保存したくありません。ある種のループなどで各組み合わせを生成し、計算を実行した後、次の組み合わせを得る方法はありますか? したがって、基本的には、組み合わせを最初に保存するのではなく、繰り返し生成したいと考えています。

したがって、疑似コードでは、私がしたいのは次のとおりです。

#loop that will generate each possible combination one by one
loop{
  operation that uses combination
}
4

1 に答える 1

12

ループは必要ありません(lapplyまたはそれ以外):

combn(1:4,2)
#      [,1] [,2] [,3] [,4] [,5] [,6]
# [1,]    1    1    1    2    2    3
# [2,]    2    3    4    3    4    4

組み合わせの合計を計算する例:

combn(1:4,2,FUN=sum)
# [1] 3 4 5 5 6 7

ユーザー定義関数の例:

x <- 11:14
combn(1:4,2,FUN=function(i,a) sum(a[i]),a=x)
#[1] 23 24 25 25 26 27

ここ(無名関数内)iはインデックスとして使用される組み合わせであり、引数aは私が渡すベクトルxです。

ユーザー定義の名前付き関数でも同じです。

fun <- function(i,a) sum(a[i])
combn(1:4,2,FUN=fun,a=x)
于 2013-07-11T13:21:00.133 に答える