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

如何从R中的函数内部删除变量,r,R,我试图创建一个函数,在其中我想删除传递给它的一个变量 现在R的工作方式很烦人,因为它复制对象而不是提供引用。 (从技术上讲,只有在您进行更改时才会进行复制…但meh…) 我试过了 a=function(b){ rm(match.call()[[2]]) } 但这就产生了错误: Error in rm(match.call()[[3]]) : ... must contain names or character strings 试试这个: Foo <- function(

我试图创建一个函数,在其中我想删除传递给它的一个变量

现在R的工作方式很烦人,因为它复制对象而不是提供引用。 (从技术上讲,只有在您进行更改时才会进行复制…但meh…)

我试过了

a=function(b){
  rm(match.call()[[2]])
}
但这就产生了错误:

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

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"

Foo与nrussell的答案类似,下面是
cgwtools::askrm
中的一行,它对所选对象执行任意函数调用:

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

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

Make
rm
爬上环境列表。请参见
?rm
。它是
pos
参数吗?对于相同的插头,
pos
envir
+1都没有这样的例子,-10表示不使用默认的R:PTY!我不得不改变它,因为我使用S4方法,它们首先需要通过一个通用函数(R语言真的很烂!)
rm(list=deparse(substitute(other)),envir=sys.frame(-2))
call(fn, as.name(thenam)), envir = parent.frame(1))