【发布时间】:2017-10-01 12:08:53
【问题描述】:
这是在 R 中创建作用域表达式的合适方法,即封装命令,其变量在评估后被消除。
我现在使用的方式是使用with():
> with(data.frame(), {foo <- 5; bar <- 6; foo + bar})
[1] 11
> foo
Error: object 'foo' not found
但这显然是一个 hack。
(顺便说一句,如果您将c() 而不是data.frame() 传递给with(),则新变量实际上最终会出现在父环境中;不知道为什么)
【问题讨论】:
-
我认为这在 R 中是不可能的。我不知道您的确切用例是什么,但通常人们会着手将代码重构为函数以避免创建大量临时变量。喜欢
x <- function() {foo <- 5; bar <- 6; foo + bar}; x() -
不确定您的意思,但您可以创建 Javascript 所称的“IIFE”,例如
(function(x){y=x+2;return(y)})(1)不会留下y挂起。 -
是的 spacedman,这就是我所需要的。 (function() {a
-
建议的副本不相关。该问题的 OP 想要一个不受全局变量影响的函数的局部范围。我想即时评估内联一次性表达式,而不会将内容留在内存中
-
with(new.env(), {foo <- 5; bar <- 6; foo + bar})作为 data.frame() 的替代品
标签: r scope evaluation