2012-10-30 27 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'参数是指定 环境的替代方法,但主要是为了后向兼容。

相关问题