1. ホーム
  2. r

[解決済み] Rのグローバル変数とローカル変数

2022-05-10 10:37:36

質問

私はRの初心者ですが、Rのローカル変数とグローバル変数の使い方がよくわかりません。

私はインターネット上のいくつかの記事を読みました。 = または <- 現在の環境での変数を代入し、その上で <<- 関数の内部でグローバル変数にアクセスすることができるんだ。

しかし、C++で覚えているように、ローカル変数は、あなたがブラケット {} の中で変数を宣言すると発生するように記憶しています。それとも 関数 のみなのか、それともRではローカル変数の概念があるのか。

ちょっと実験してみたところ、括弧だけでは不十分なような気がするのですが、何か間違っているのでしょうか?

{
   x=matrix(1:10,2,5)
}
print(x[2,2])
[1] 4

どのように解決するのですか?

関数内で宣言された変数は、その関数のローカル変数になります。例えば

foo <- function() {
    bar <- 1
}
foo()
bar

は以下のようなエラーを出します。 Error: object 'bar' not found .

を作りたい場合は bar をグローバル変数にしたい場合は、そうする必要があります。

foo <- function() {
    bar <<- 1
}
foo()
bar

この場合 bar は関数の外からアクセス可能です。

しかし、CやC++、あるいは他の多くの言語とは異なり、ブラケットは変数のスコープを決定しません。例えば、次のようなコード・スニペットでは。

if (x > 10) {
    y <- 0
}
else {
    y <- 1
}

y が表示された後もアクセス可能です。 if-else ステートメントの後でもアクセス可能です。

おっしゃるとおり、ネストされた環境を作ることもできます。以下の2つのリンクで、その使用方法を理解することができます。

  1. http://stat.ethz.ch/R-manual/R-devel/library/base/html/environment.html
  2. http://stat.ethz.ch/R-manual/R-devel/library/base/html/get.html

ここに小さな例があります。

test.env <- new.env()

assign('var', 100, envir=test.env)
# or simply
test.env$var <- 100

get('var') # var cannot be found since it is not defined in this environment
get('var', envir=test.env) # now it can be found