80要素セットのサブセットを扱うため、非常に計算量の多いコードを最適化しようとしています。深さが未知のネストされたリストに値を格納するR
私が加速したい重要なステップは、ループ内の現在のサブセットがすでに処理されているかどうかを調べることです。現時点では、このサブセットが同じサイズk(基数)の既に処理されたサブセットに含まれているかどうかを確認します。サブセットが既に処理されているかどうか(O(80 choose k)の検索ではなくO(1))をチェックするために、順次リストに入れて徐々に処理されたサブセットを保存するほうがずっと速くなります。
私は何の問題現在のサブセットは扱わサブセットの私のネストされたリストにあるかどうかを確認するための機能をコーディングしなかった:treated[[2]][[5]][[3]]==TRUE
IFF TRUE access(treated, subset=c(2,5,3))
戻っはしかし、私は(私のループ内)を格納する方法は考えている私処理されたリストの現在のサブセットtreated[h] <- TRUE
ここでhは現在のサブセットです(上の例では:h=c(2,5,3)
)
私が直面している主な問題は、[[..]]の数がさまざまです私のループの中に。 hを80の長さにして80 [[..]]のシーケンスを入れるように、hを完了するのではなく、他の選択肢がありますか?treated[[h[1]]][[h[2]]]...[[h[80]]] <- TRUE
?
驚くばかり!私はこのコマンドを知らなかった。それは他のものに当てはまるより一般的な構文の一部ですか? – bixiou
Btw、あなたが最初に要素(i、j)を入力しなくても、処理されたネストされたリストに要素(i、j、k)を入力することはないので、あなたのソリューションは私の場合(単独で)機能します。 – bixiou
LISPはRの構造に影響を与えた言語の1つです(実際は私はLISPERではありません)。 LISPでは、すべての演算子が実際に関数です。 Rの場合もそうです。すべての演算子は関数呼び出しです。 –