我有一个功能,应该执行以下操作:
以下是一个例子:
removeReload <- function(old, new){
rm(old)
detach("package:anypackage")
library(anypackage)
new <- new
}
但是,此功能不从工作区中删除旧。我也试过这个函数old <- NULL
,但是再次无济于事。
关于为什么会出现这种情况的任何想法,以及如何将其删除?
谢谢!
答案 0 :(得分:2)
rm
附带一个envir
参数,用于指定从中删除对象的环境。默认值是调用rm
的环境。通常,如果使用rm(blah)
,则调用环境是您正在使用的环境,但如果将rm
放在函数中,则调用环境就是函数环境。您可以使用rm(old, envir = .GlobalEnv)
请注意使用此功能进行编程 - 如果将其置于另一个功能中,可能会导致意外后果。
示例:
> foo = function() {
+ rm(x, envir = .GlobalEnv)
+ }
> x = 1
> foo()
> x
帮助页面中有更多详细信息?rm
,该页面链接到?environment
以获取更多详细信息。
同样,作为函数最后一行的new <- new
没有在全局环境中进行赋值。通常的做法是让你的函数return(new)
并按照调用的方式进行赋值,类似于new <- removeUnload(old, new)
。但是很难从你提供的伪代码中提出“良好实践”建议,因为你传入new
作为输入......目前尚不清楚你的函数参数是对象名称的对象还是字符串。