Rで関数の中でグローバル変数を定義する
通常、関数の中で定義した変数はその関数の中だけで有効で、関数実行後は残らない。例えば
x <- 10 myfunc <- function(){ x <- 9999 return(x) } myfunc() # [1] 9999 #関数の返り値 x # [1] 10 #グローバル変数には影響していない
しかし、 <<- を使えばグローバル変数に代入することができる。
x <- 10 myfunc <- function(){ x <- 9999 x <<- 55 return(x) } myfunc() # [1] 9999 #関数内のローカル変数が返り値 x # [1] 55 #関数内で定義したグローバル変数が更新されている
注意しなければいけないのは、関数内で定義している2つのxは別の変数であるということ。グローバル変数はあくまでグローバル変数であり、ローカル変数が優先される。(ローカル変数が定義されない場合はグローバル変数のxが返り値になる)グローバル変数とローカル変数は別の名前にしたほうが無難。
また、assign(変数, 値, env=.GlobalEnv)でもグローバル変数を定義でき、どうやらこちらのほうが推奨されているらしい。