
282
17
章
purrr
でイテレーション
要素を使ってループ:
for (x in xs)
出力を効率的に格納するのは難しいので、グラフを書いたり保存するなど、副作用だけを使う
ときに有効。
名前を使ってループ:
(nm in names(xs))
x[[nm]]
で値にアクセスできる名前を指定する。これは、グラフのタイトルやファイル名など
名前を使うときに有効。名前付きの出力を作るなら、次のように結果ベクトルに名前を付ける
のを忘れないようにする。
results <- vector("list", length(x))
names(results) <- names(x)
数値の添字では、その位置で名前と値が両方取得できるので、最もよく使われます。
for (i in seq_along(x)) {
name <- names(x)[[i]]
value <- x[[i]]
}
17.3.3
出力長不明
出力の長さがどれだけになるかわからないこともあります。例えば、長さがランダムなベクトルを
シミュレーションしたいとします。次のように、ベクトルを順に大きくしてこの問題を解きたくなる
でしょう。
means <- c(0, 1, 2)
output <- double()
for (i in seq_along(means)) {
n <- sample(100, 1)
output <- c(output, rnorm(n, means[[i]]))
}
str(output)
#> num [1:202] 0.912 ...