将表达式计算到给定环境中

时间:2017-11-08 12:57:13

标签: r

我想在给定环境中调用一个函数,以便函数的执行不会破坏全局环境。我有类似的东西:

f <- function() { x <<- 5 }
e <- new.env()
evalq(f(), envir = e)

我想评估环境f()中的e,但似乎它不起作用,因为变量x可以从全局env而不是env {{1}访问}。我的意思是我想通过键入e而不是x来访问e$x

我尝试在x内构建函数f,如下所示:

e

但它仍然不起作用,e <- new.env() evalq(f <- function() { x <<- 5 }, envir = e) evalq(f(), envir = e) 位于全局环境中,而不是x

编辑更多信息:

根据我收到的答案,我了解不应使用e。问题是,在实践中,我不知道<<-是什么,因为它是通过获取通过闪亮的应用程序下载的文件获得的。此应用程序的目的是评估学生编写的分类器函数f。因此,如果他们在函数中使用f运算符,我不想污染我的全局env(这似乎是<<-运算符的描述中不可能的。)

我想我可以用

之类的东西删除可能创建的变量
<<-

但是有更好的解决方案吗?

2 个答案:

答案 0 :(得分:2)

您可以使用assign来定义应创建对象的环境:

e <- new.env()
f <- function() {
    assign("x", 5, envir = e)
}
f()

x
# Error: object 'x' not found
e$x
# [1] 5

答案 1 :(得分:2)

正如@lmo所说,最简单的方法是不使用<<-来做到这一点。此外,该函数在其自己的环境中运行,因此如果您使用<-,则需要将函数的输出分配给变量(否则它仅在f的临时环境中创建这样的事情会起作用:

f <- function() { x <- 5 }
e <- new.env()
evalq(x <- f(), envir = e)

e$x
#[1] 5