Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在R中的函数中操纵全局环境?_R - Fatal编程技术网

如何在R中的函数中操纵全局环境?

如何在R中的函数中操纵全局环境?,r,R,我想从我当前的环境中删除所有的对象,除了其中的两个,类似这样的 rm(list=setdiff(ls(),c("current_object_a","current_object_b"))) 但我想在函数中调用它。如果我现在这样做,什么也不会发生,因为我正在删除函数中的环境变量,而不是全局环境。您可以使用pos或envir参数指定环境 rm(list=setdiff(ls(pos=globalenv()), c("current_object_a","curre

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

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

但我想在函数中调用它。如果我现在这样做,什么也不会发生,因为我正在删除函数中的环境变量,而不是全局环境。

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

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

?rm

“pos”参数可以指定要从中访问的环境 以以下几种方式之一删除对象:作为整数( “搜索”列表中的位置);作为 搜索列表中的元素;或作为“环境”(包括 使用“sys.frame”访问当前活动的函数调用)。 “envir”参数是指定 环境,但主要是为了后端兼容性


您必须将环境指定为
ls
rm

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

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

+1为了识别
ls
需要指定
globalenv()
,我在lib目录中有一组R文件,我希望我的环境反映lib中的更改。如果我重命名一个函数,我想删除旧名称,因此我删除了除rm函数和source_dir函数(加载lib目录)之外的所有对象,然后调用rf()(刷新)再次加载它们。有更好的方法吗?rf我想知道是否有更好的方法来创建一个新的环境,将其连接到搜索路径,然后在该环境中执行所有操作。实际上,你是在创造自己的控制空间,因此你可以在那里添加(和销毁)而不受惩罚。在搜索路径上,您仍然可以访问这些对象,而无需指定环境。@BrianDiggs这正是
devtools::load_all
的工作原理