如何操作R中函数内的全局环境?

nac*_*cab 3 r

我想删除当前环境中的所有对象,除了其中两个,就像这样

rm(list=setdiff(ls(),c("current_object_a","current_object_b")))
Run Code Online (Sandbox Code Playgroud)

但是我想在一个函数中调用它.如果我现在这样做,没有任何反应,因为我正在删除函数内的环境变量,而不是全局环境.

Bri*_*ggs 9

你必须指定环境都lsrm.

rm(list = setdiff(ls(globalenv()),
                  c("current_object_a", "current_object_b")),
   pos = globalenv())
Run Code Online (Sandbox Code Playgroud)

但是,真的,你为什么要这样做?从函数中删除全局环境中的东西似乎是一件坏事.

  • 我会创建一个新环境,将其附加到搜索路径,然后在该环境中执行所有操作.实际上,你正在创造自己的空间来控制,所以你可以在那里加入(并摧毁)而不受惩罚.在搜索路径上,您仍然可以访问这些对象而无需指定环境. (3认同)

GSe*_*See 6

您可以使用posor envir参数指定环境

rm(list=setdiff(ls(pos=globalenv()),
                c("current_object_a","current_object_b")), 
   pos=globalenv())
Run Code Online (Sandbox Code Playgroud)

?rm

'pos'参数可以用以下几种方式指定从中移除对象的环境:作为整数('search'列表中的位置); 作为搜索列表中元素的字符串名称; 或者作为'环境'(包括使用'sys.frame'来访问当前活动的函数调用).'envir'参数是指定环境的另一种方法,但主要用于反向兼容.