如何从R中的函数内部删除变量
我试图创建一个函数,在其中我想删除传递给它的一个变量 现在R的工作方式很烦人,因为它复制对象而不是提供引用。 (从技术上讲,只有在您进行更改时才会进行复制…但meh…) 我试过了如何从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(
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))
(是的,我正在这里插入我自己的工具包:-)Makerm
爬上环境列表。请参见?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))