構成:
OS : Windows 10 (64 bits)
R version: 3.6.3
私は R を学んでいて、現在 R の環境について読んでいます。いくつかの練習をしていて、自分で作成した例を思いつきましたが、まだ説明と概念の理解ができていないようです。 Rでオブジェクトを適切に検索します。一般的に言えば、私がこれまでに理解したこと (間違っていたら訂正してください) は、R が現在の環境でオブジェクトを見つけられない場合、既存のすべての親環境を順番に呼び出すということです。実際にどのように機能するかを確認するために、次のプログラムを作成しました。
library(rlang)
library(envnames)
library(lobstr)
e1 <- env()
e2 <- new_environment(parent = e1)
e3 <- new_environment(parent = e2)
e4 <- new_environment(parent = e3)
e5 <- new_environment(parent = e4)
e6 <- new_environment(parent = e5)
e7 <- new_environment(parent = e6)
e8 <- new_environment(parent = e7)
e9<- new_environment(parent = e8)
e10 <- new_environment(parent = e9)
e4$testvar <- 1200
e10$testfun <- function(x) {
print(envnames::environment_name(caller_env()))
return (testvar)
}
そして、呼び出し元の環境としてe10を選択して上記のプログラムを実行する方法は次のとおりです
with(data = e10, expr = e10$testfun())
testvarが環境e4で定義されており、e4がe10の祖先であることを考えると、 testvarの値を見つけるために、R が親ツリーで e10 から e4 まで上がると予想しました。しかし、プログラムは次のエラーで停止します。
Error in e10$testfun() (from #3) : object 'testvar' not found
私が誤解していたことを教えていただけますか?私が使用するという事実with(data = e10, ...)
は、関数呼び出しに使用される環境が e10 であることを意味するべきではありませんか?