如何从R中的函数内部删除变量

时间:2014-07-22 15:08:50

标签: r

我正在尝试创建一个函数,我想删除传递给它的一个变量。

现在R以恼人的方式工作,因为它复制对象而不是提供引用。 (从技术上讲,复制只会在你做出改变时发生......但是......)

a=function(b){
  rm(b)
  # rm(b)
}
test=123
a(test) # will remove b, not test
# you can verify that by adding the 2nd rm(b)

我试过

a=function(b){
  rm(match.call()[[2]])
}

但是会出错:

 Error in rm(match.call()[[3]]) : 
  ... must contain names or character strings 

2 个答案:

答案 0 :(得分:3)

试试这个:

Foo <- function(x){
  Sx <- deparse(substitute(x))
  rm(list=Sx,envir=sys.frame(-1))
}
##
Z <- 123
ls()
##
[1] "Foo" "Z" 
##
Foo(x=Z)
ls()
[1] "Foo"

答案 1 :(得分:0)

类似于nrussell的回答,这里是来自cgwtools::askrm的行,它对所选对象执行任意函数调用:

call(fn, as.name(thenam)), envir = parent.frame(1))

(是的,我在这里插入我自己的工具包:-))