9

特定の条件に一致するベクトル要素のすべての組み合わせを検索したいと考えています。関数 expand.grid は、特定の条件をチェックせずに、可能なすべての組み合わせを返します。expand.grid 関数を使用した後に特定の条件をテストすることは可能ですが、可能な組み合わせの数が多すぎて expand.grid でそれらを生成できない場合があります。したがって、可能なすべての組み合わせを生成しながら条件をチェックできる機能はありますか。

これは、問題の単純化されたバージョンです。

A <- seq.int(12, from=0, by=1)*15
B <- seq.int(27, from=0, by=1)*23
C <- seq.int(18, from=0, by=1)*18
D <- seq.int(33, from=0, by=1)*10

out<-expand.grid(A,B,C,D) #out is a dataframe with 235144 x 4 as dimensions
idx<-which(rowSums(out)<=400 & rowSums(out)>=300) #Only a small fraction of 'out' is needed
results <- out(idx,)
4

1 に答える 1

1

一言で言えば、いいえ。結局のところ、どの組み合わせが望ましい/望ましくないかを事前に知っていれば、それらを展開から除外できます expand.grid(A[A<20],B[B<15],...)。私があなたの本当の質問であると仮定している一般的なケースでは、入力ベクトルの一部を除外する簡単な方法はありません。

各組み合わせを順番にテストし、それを保存または拒否するマルチレベル ループを書きたいだけかもしれません。これは遅くなります (繰り返しますが、すべてが TRUE または FALSE である領域を予測するための巧妙なアルゴリズムを考え出さない限り)。したがって、長期的には、メモリ制限を超えないように、大きな計算 (およびデータセット) を分割するいくつかの R パッケージを使用する方がよい場合があります。

以上のことをすべて述べたので、誰かがまさにそれを行うパッケージへのリンクを投稿しようとしています :-(

于 2013-09-12T12:13:01.673 に答える