变量范围的推荐方法

时间:2017-06-06 11:45:41

标签: r scope

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

{
  tmp1 <- 5
  tmp2 <- 2
  print(tmp1 + tmp2)
}

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

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

(function(){
  tmp1 <- 5
  tmp2 <- 2
  print(tmp1 + tmp2)
})()

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

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

2 个答案:

答案 0 :(得分:8)

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

local({
  tmp1 <- 5
  tmp2 <- 2
  print(tmp1 + tmp2)
})

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

来自?local

  

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

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

此外,with(在注释中由@Rich Scriven建议)也可以在基数R中使用1只是虚拟数据:

with(1, {
    tmp1 <- 5
    tmp2 <- 2
    print(tmp1 + tmp2)
})

来自?with

  

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

答案 1 :(得分:0)

在主代码体中,变量是全局的。但是,正如您发现自己的范围在函数中是本地的:

addme <- function(){
    tmp1 <- 5;
    tmp2 <- 2;
    return (tmp1+tmp2)
}

然后调用调用addme()将返回总和,但该变量在

之外仍然无法访问
> addme()
[1] 7
> tmp1
Error: object 'tmp1' not found