51

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

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

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

4

4 に答える 4

82

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

x <- vector(mode = "list", length = 10)
于 2012-09-17T17:37:00.663 に答える
25

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

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

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

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

于 2012-09-17T17:51:45.257 に答える
6

このようなもの:

   x <- vector('list', 10)

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

于 2012-09-17T17:37:43.603 に答える
0

3つの既存の答えはすべて素晴らしいです。

関数がリストvector()を作成できる理由は、 JennyBCのpurrrチュートリアルで説明されています。

リストは実際にはまだRのベクトルですが、アトミックベクトルではありません。list()を使用して明示的にリストを作成しますが、アトミックベクトルと同様に、ほとんどのリストは実際には別の方法で作成されます。

リストを事前に割り当てるには

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

ベクトルを事前に割り当てるには

vec <- rep(NA, 10)
于 2022-01-05T23:08:19.457 に答える