次の関数を考える
f <- function(x) {
g <- function(y) {
y + z
}
z <- 4
x + g(x)
}
Rで次のコードを実行すると、答えはなぜ10になりますか?yがこの質問にどのように対応するかについて少し混乱しています。
z <- 10
f(3)
2
関数env内から「z」を取得しています
—
akrun
4 + 2*x
最後に、関数は単にやっているのではないですか?ここで、4 = z
@markusはい、しかし問題は、なぜz = 4なのかということです。その関数定義キャプチャさz = 10を期待するのが妥当かもしれない
—
ロバートDodier
@RobertDodier最初のenv内、つまり関数内の変数をチェックし、それを見つけて、親env内の他の場所での検索を停止します。あなたはつまり、関数内で「Z」をリネームすることでテストすることができ
—
akrun
z1 <- 4
、関数内およびf(3)# [1] 16
または、環境を指定して
—
akrun
z <- 4; environment(g) <- .GlobalEnv
電話をかけるz <- 10 > f(3) [1] 16