Rでは、ループ内のデータ構造を拡張することは非効率的です。list
特定のサイズのを事前に割り当てるにはどうすればよいですか?と引数matrix
を使用してこれを簡単にします。リストでこれをどのように行うのですか?例えば:ncol
nrow
x <- list()
for (i in 1:10) {
x[[i]] <- i
}
これは非効率的だと思います。これを行うためのより良い方法は何ですか?
Rでは、ループ内のデータ構造を拡張することは非効率的です。list
特定のサイズのを事前に割り当てるにはどうすればよいですか?と引数matrix
を使用してこれを簡単にします。リストでこれをどのように行うのですか?例えば:ncol
nrow
x <- list()
for (i in 1:10) {
x[[i]] <- i
}
これは非効率的だと思います。これを行うためのより良い方法は何ですか?
vector
目的のモードと長さの空のベクトルを作成できます。
x <- vector(mode = "list", length = 10)
@Jilberが言ったことを拡張するためにlapply
、このタイプの操作のために特別に構築されています。
forループの代わりに、次を使用できます。
x <- lapply(1:10, function(i) i)
これをより複雑な例に拡張できます。多くの場合、forループの本体にあるものは、ループの各反復からの行のように見える単一の行を受け入れる関数に直接変換できます。
このようなもの:
x <- vector('list', 10)
しかし、lapplyを使用するのが最良の選択です
3つの既存の答えはすべて素晴らしいです。
関数がリストvector()
を作成できる理由は、 JennyBCのpurrrチュートリアルで説明されています。
リストは実際にはまだRのベクトルですが、アトミックベクトルではありません。list()を使用して明示的にリストを作成しますが、アトミックベクトルと同様に、ほとんどのリストは実際には別の方法で作成されます。
list <- vector(mode = "list", length = 10)
vec <- rep(NA, 10)