Если у меня есть две вложенные среды, использующие одно и то же имя переменной, как бы я захватил значение внешней среды?
Мне трудно понять, как правильно это реализовать. Я попробовал несколько вариантов parent.frame(x)
и sys.frame(x)
внутри eval. Мы ценим любые предложения.
ПРИМЕР:
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
Очевидные решения (Pass 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()
?