在C和变体中,当你有这样的东西时:
{
tmp1 <- 5
tmp2 <- 2
print(tmp1 + tmp2)
}
将打印7,但一旦范围tmp1
结束,tmp2
和}
变量将从堆栈中删除。我有时想在R中使用类似的功能,这样我就不必在某个时间点之后清理(很多)临时变量。
在R中使这项工作的一种方法是这样的:
(function(){
tmp1 <- 5
tmp2 <- 2
print(tmp1 + tmp2)
})()
现在看起来似乎有点hackish - 或者它可能只是我。
R中是否有更好或更简洁(即更易阅读)的方法?
答案 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