同じ変数名を使用するネストされた環境が2つある場合、外部環境の値を取得するにはどうすればよいですか?
これを実装する正しい方法を見つけるのに苦労しています。私はevalのいくつかのバリエーションparent.frame(x)
とsys.frame(x)
内部を試しました。任意の提案をいただければ幸いです。
例:
outerFunc <- function() {
obj <- "Outer Object"
innerFunc()
}
innerFunc <- function() {
# A local variable with same name is created
obj <- "Inner Object"
# would like to grab the value of obj from the outer environment
obj.callingFunc <- eval(obj, envir=sys.frame(-1))
cat(obj.callingFunc) # gives "Inner Object" instead of "Outer Object"
}
> outerFunc()
Inner Object
この特定のケースでは、明白な解決策(明示的に渡すobj
。別の変数名を使用するなど)は利用できません。
編集
以下の@GregSnowと@Dwinの回答を調べます
# THESE WORK
eval(quote(obj), envir=parent.frame()) # equivalent to evalq(obj, envir=parent.frame())
get("obj", envir=parent.frame())
# THESE DO *NOT* WORK
eval("obj", envir=parent.frame())
get(quote(obj), envir=parent.frame())
get()
vsで引用することの効果について何か考えはありeval()
ますか?