2012-10-30 51 views
2

我想除了他們兩個從我目前的環境中刪除所有的對象,像這樣如何操作R中函數內的全局環境?

rm(list=setdiff(ls(),c("current_object_a","current_object_b"))) 

,但我想在函數中調用它。如果我現在這樣做,沒有任何反應,因爲我刪除了函數內部的環境變量,而不是全局環境。

回答

8

您必須指定環境lsrm

rm(list = setdiff(ls(globalenv()), 
        c("current_object_a", "current_object_b")), 
    pos = globalenv()) 

但是,真的,你爲什麼要這樣做?從一個函數中刪除全局環境中的東西看起來像是一件壞事。

+0

+1用於識別'ls'需要指定'globalenv()'還 – GSee

+0

+1對於壞事 –

+0

我在lib目錄中有一組R文件,我希望我的環境能夠反映lib 。如果我重命名一個函數,我想刪除舊名稱,所以我刪除了除rm函數和source_dir函數(加載lib目錄)之外的所有對象,然後再次加載它們,調用rf()(refresh)。有沒有更好的方法來做到這一點?如果(重置){rm(list = setdiff(ls(globalenv()),c(「source_dir」,「rf」,except)), pos = globalenv()) } source_dir(「my/path/to/lib /」) } – nachocab

6

可以與任一posenvir參數

rm(list=setdiff(ls(pos=globalenv()), 
       c("current_object_a","current_object_b")), 
    pos=globalenv()) 

?rm

的 'POS' 參數中指定的環境可以指定環境從中 刪除對象可以通過以下幾種方式之一:作爲整數(「搜索」列表中的 位置);作爲搜索列表中的 元素的字符串名稱;或作爲'環境'(包括使用'sys.frame'訪問當前活動函數調用的 )。 'envir'參數是指定 環境的替代方法,但主要是爲了後向兼容。

相關問題