解析中的嵌套函数(eval(…),envir=custom)
我有一个定制的R环境解析中的嵌套函数(eval(…),envir=custom),r,environment,scoping,non-standard-evaluation,R,Environment,Scoping,Non Standard Evaluation,我有一个定制的R环境 e = new.env() e[["a"]] = function(x) b(x) e[["b"]] = function(x) x + 1 函数b()按预期运行 > eval(parse(text = "b(1)"), envir = e) [1] 2 但是a(1)抛出一个错误 > eval(parse(text = "a(1)"), envir = e) Error in a(1) : could not find function "b" 如何让ev
e = new.env()
e[["a"]] = function(x) b(x)
e[["b"]] = function(x) x + 1
函数b()
按预期运行
> eval(parse(text = "b(1)"), envir = e)
[1] 2
但是a(1)
抛出一个错误
> eval(parse(text = "a(1)"), envir = e)
Error in a(1) : could not find function "b"
如何让
eval(parse(text=“a(1)”),envir=e)
工作?您的问题是R中的函数跟踪创建它们的环境。当您在任何其他上下文之外调用function()
语句时,该函数将在全局环境中创建,然后您将该函数分配给不同的环境,但它不会更改最初定义它的位置。观察
e = new.env()
e[["a"]] = function(x) b(x)
environment(e[["a"]])
# <environment: R_GlobalEnv>
identical(e, environment(e[["a"]]))
# [1] FALSE
或者首先使用evalq
evalq(a <- function(x) b(x), e)
evalq(b <- function(x) x + 1, e)
identical(e, environment(e[["a"]]))
# [1] TRUE
evalq(理想的方法是避免eval(解析(…)
)?
evalq(a <- function(x) b(x), e)
evalq(b <- function(x) x + 1, e)
identical(e, environment(e[["a"]]))
# [1] TRUE