我正在尝试创建一个函数,我想删除传递给它的一个变量。
现在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
答案 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))
(是的,我在这里插入我自己的工具包:-))