如何在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
的工作原理