web-dev-qa-db-ja.com

Rの事前割り当てリスト

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

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

これは非効率だと思います。これを行うためのより良い方法は何ですか?

43
Alex

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

x <- vector(mode = "list", length = 10)
60
Luciano Selzer

@Jilberが言ったことを拡張するために、lapplyはこの種の操作のために特別に構築されています。

forループの代わりに、次を使用できます。

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

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

22
Justin

このようなもの:

   x <- vector('list', 10)

しかし、lapplyを使用することが最良の選択です

5
Jilber Urbina