变量范围的推荐方法

Dav*_*vic 5 scope r

在C和变体中,当你有这样的东西时:

{
  tmp1 <- 5
  tmp2 <- 2
  print(tmp1 + tmp2)
}
Run Code Online (Sandbox Code Playgroud)

将打印一个7,但是一旦范围结束,tmp1tmp2变量将从堆栈中删除}.我有时想在R中使用类似的功能,这样我就不必在某个时间点之后清理(很多)临时变量.

在R中使这个工作的一种方法是这样的:

(function(){
  tmp1 <- 5
  tmp2 <- 2
  print(tmp1 + tmp2)
})()
Run Code Online (Sandbox Code Playgroud)

现在看起来似乎有点hackish - 或者它可能只是我.

在R中有没有更好或更简洁(即更易阅读)的方法?

989*_*989 8

您可能希望local在基础R中使用此目的:

local({
  tmp1 <- 5
  tmp2 <- 2
  print(tmp1 + tmp2)
})
Run Code Online (Sandbox Code Playgroud)

因此local,只要保留范围,任何在范围内创建的变量都将消失.

来自?local:

local 评估本地环境中的表达式.

有关?local详细信息,请参阅


另外,with(在评论中由@Rich Scriven建议)也可以在基数R中使用,其中1只有一个虚拟数据:

with(1, {
    tmp1 <- 5
    tmp2 <- 2
    print(tmp1 + tmp2)
})
Run Code Online (Sandbox Code Playgroud)

来自?with:

with 是一个泛型函数,用于在由数据构造的本地环境中计算expr.