在 R 中创建作用域表达式以清理中间变量

Bak*_*urg 0 evaluation scope r

这是在 R 中创建作用域表达式的合适方法,即封装命令,其变量在评估后被消除。

我现在使用的方式涉及使用with()

> with(data.frame(), {foo <- 5; bar <- 6; foo + bar})
[1] 11
> foo
Error: object 'foo' not found
Run Code Online (Sandbox Code Playgroud)

但这显然是一个黑客。

(顺便说一句,如果您传递c()而不是data.frame()to with(),则新变量实际上最终会出现在父环境中;不知道为什么)

use*_*637 5

local({foo <- 5; bar <- 6; foo + bar})

或者

local({foo <- 5 bar <- 6 foo + bar})

来自?local(我的重点)

local 计算本地环境中的表达式。除了它的默认参数创建一个新的空环境之外,它与 evalq 等效。这对于创建匿名递归函数和作为一种有限的命名空间特性很有用,因为在环境中定义的变量从外部是不可见的