我想在给定环境中调用一个函数,以便函数的执行不会破坏全局环境。我有类似的东西:
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(这似乎是<<-
运算符的描述中不可能的。)
我想我可以用
之类的东西删除可能创建的变量<<-
但是有更好的解决方案吗?
答案 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