まずは蝋の翼から。

学んだことを書きながら確認・整理するためのメモブログ。こういうことなのかな?といったことをふわっと書いたりしていますが、理解が浅いゆえに的はずれなことも多々あると思うのでツッコミ歓迎

Rでloopを使って動的な名前の変数を作成したい

目的

Rにおいて、loop処理内で各loop毎に異なった変数を作成したい。

問題

pasteで各loop毎に文字列を作成して、その文字を変数名にしようとした。

for (n in 1:3) {
  v_name <- paste('v', n, sep = '') #変数名作成(v1,v2,v3)
  v_name <- n #作成した変数名(v1,v2,v3)にnを格納
}
v1
# => エラー:  オブジェクト 'v1' がありません 

この場合、例えば1週目(n=1)ではv_name = nv1 <- 1ではなくv_name <- 1として処理される。おそらく、オブジェクトのv_name(=v1)ではなく、新規変数名としてv_nameを新たに宣言しているという扱い。

対処

assign関数を使う。これはassign(変数名, 代入したい値)という宣言で変数名 <- 代入したい値と等価。

for (n in 1:3) {
  v_name <- paste('v', n, sep = '') #変数名作成(v1,v2,v3)
  assign(v_name, n) #作成した変数名(v1,v2,v3)にnを格納
}
v1
# => 1

参考

Rで他言語みたいに変数名を変えながらfor文とかでつまったこと - WhereToStart