【发布时间】:2012-10-20 05:37:00
【问题描述】:
我想从当前环境中删除所有对象,除了其中两个,类似这样
rm(list=setdiff(ls(),c("current_object_a","current_object_b")))
但我想在函数中调用它。如果我现在这样做,什么都不会发生,因为我删除的是函数内部的环境变量,而不是全局环境。
【问题讨论】:
标签: r
我想从当前环境中删除所有对象,除了其中两个,类似这样
rm(list=setdiff(ls(),c("current_object_a","current_object_b")))
但我想在函数中调用它。如果我现在这样做,什么都不会发生,因为我删除的是函数内部的环境变量,而不是全局环境。
【问题讨论】:
标签: r
您必须为ls 和rm 指定环境。
rm(list = setdiff(ls(globalenv()),
c("current_object_a", "current_object_b")),
pos = globalenv())
但是,说真的,你为什么要这样做?从函数中删除全局环境中的内容似乎是一件坏事。
【讨论】:
ls 需要同时指定globalenv()
devtools::load_all 的工作原理
您可以使用pos 或envir 参数指定环境
rm(list=setdiff(ls(pos=globalenv()),
c("current_object_a","current_object_b")),
pos=globalenv())
来自?rm
“pos”参数可以指定从哪个环境 以多种方式中的任何一种删除对象:作为整数( 在“搜索”列表中的位置);作为字符串名称 搜索列表中的元素;或作为“环境”(包括 使用“sys.frame”访问当前活动的函数调用)。 “envir”参数是指定 环境,但主要是为了向后兼容。
【讨论】: