2014-07-22 34 views
2

我想創建一個函數,在該函數中我想刪除傳遞給它的變量之一。如何從R中的函數中刪除變量

現在R以煩人的方式工作,因爲它複製對象而不是給出引用。 (技術上覆制只有當你做出改變......但MEH發生...)

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

製作'rm'爬上環境清單。見'?rm'。 –

+0

是否是'''pos'''參數?這個 – phonixor

+0

不是'pos'或'envir'的例子。 –

回答

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" 
+0

TY!我不得不改變它,因爲我使用S4方法,並且他們首先需要通過一個通用函數(R語言非常糟糕!)'''rm(list = deparse(substitute(other)),envir = sys.frame( -2))''' – phonixor

0

類似nrussell的答案,這裏是從cgwtools::askrm這確實選擇的對象上的任意函數調用行:

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

(是的,我在這裏堵我自己的工具包:-))

+1

+1爲同樣的插件,-10爲不使用默認的R:P – phonixor