
17.3
for
ループのバリエーション
283
out <- vector("list", length(means))
for (i in seq_along(means)) {
n <- sample(100, 1)
out[[i]] <- rnorm(n, means[[i]])
}
str(out)
#> List of 3
#> $ : num [1:83] 0.367 1.13 -0.941 0.218 1.415 ...
#> $ : num [1:21] -0.485 -0.425 2.937 1.688 1.324 ...
#> $ : num [1:40] 2.34 1.59 2.93 3.84 1.3 ...
str(unlist(out))
#> num [1:144] 0.367 1.13 -0.941 0.218 1.415 ...
ここでは、ベクトルのリストを1 つのベクトルにするために
unlist()
を使いました。より安全な
のは
purrr::flatten_dbl()
を使うことです。これは、入力が
double
のリストでないとエラーを投
げます。
このパターンは他の場合でも生じます。
●
長い文字列を生成する場合。繰り返しのたびに前の文字列に
paste()
するのではなく、出力を文
字ベクトルに保存しておき、
paste(output, collapse = "")
でベクトルの要素を連結して文字
列にする。
●
大きなデータフレームを生成する場合。繰り返しのたびに
rbind()
で逐次作 ...