読者です 読者をやめる 読者になる 読者になる

からあげ定食

僻地の大学生の進捗発表。R,Python,yacht,twitteR,自然言語処理,将棋,機械学習,ヨット

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)でもグローバル変数を定義でき、どうやらこちらのほうが推奨されているらしい。

(参考)
http://cse.naro.affrc.go.jp/takezawa/r-tips/r/32.html