最終結果の数が事前にわからない場合、R のループで結果を収集する慣用的な方法は何ですか? おもちゃの例を次に示します。
results = vector('integer')
i=1L
while (i < bigBigBIGNumber) {
if (someCondition(i)) results = c(results, i)
i = i+1
}
results
この例の問題点は、追加のたびにベクトルを再割り当てする必要があるため、二次的な複雑さがあることです (私は推測します)。(これは正しいですか?) これを回避する解決策を探しています。
が見つかりましたが、メモリを節約するために避けたいFilter
事前生成が必要です。1:bigBigBIGNumber
(質問:for (i in 1:N)
事前に生成1:N
してメモリに保持しますか?)
次のようなリンクされたリストのようなものを作成できます。
results = list()
i=1L
while (i < bigBigBIGNumber) {
if (someCondition(i)) results = list(results, i)
i = i+1
}
unlist(results)
(これは連結ではないことに注意してください。 のような構造を構築し、list(list(list(1),2),3)
で平坦化していunlist
ます。)
これよりも良い方法はありますか?通常使用される慣用的な方法は何ですか? (私はRに非常に慣れていません。)この種の問題に取り組む方法についての提案を探しています。コンパクト (書きやすい) と高速なコードの両方に関する提案は大歓迎です! (しかし、私は高速でメモリ効率の良いことに焦点を当てたいと思います。)