Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
解析中的嵌套函数(eval(…),envir=custom)_R_Environment_Scoping_Non Standard Evaluation - Fatal编程技术网

解析中的嵌套函数(eval(…),envir=custom)

解析中的嵌套函数(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

我有一个定制的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"

如何让
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