2012-09-17 20 views
35

ループ内でデータ構造を拡張するのは、Rでは非効率的です。特定のサイズのlistを事前に割り当てるにはどうすればよいですか? matrixncolnrow引数でこれを簡単にします。どのようにリストの中でこれを行うのですか?例:preallocate list in R

x <- list() 
for (i in 1:10) { 
    x[[i]] <- i 
} 

これは非効率的であると推測します。これを行う良い方法は何ですか?

答えて

49

vectorは、望ましいモードと長さの空ベクトルを作成できます。

x <- vector(mode = "list", length = 10) 
4

このような何か:

x <- vector('list', 10) 

しかしlapply使用すると、@Jilberがlapplyは、特別にこのタイプの動作のために構築されている、と述べたものに拡張するために最良の選択

19

です。

の代わりに、ループのために、あなたが使用できます。

x <- lapply(1:10, function(i) i) 

あなたはより複雑な例にこれを拡張することができます。多くの場合、forループの本体にあるものは、ループの各繰り返しから行のように見える単一の行を受け入れる関数に直接変換できます。