函数中的rm()和detach() - 不工作

时间:2017-10-26 15:30:58

标签: r function

我有一个功能,应该执行以下操作:

  • 删除给定的向量
  • 卸载给定的包
  • 重新加载给定的包

以下是一个例子:

removeReload <- function(old, new){
rm(old)
detach("package:anypackage")
library(anypackage)
new <- new
}

但是,此功能从工作区中删除。我也试过这个函数old <- NULL,但是再次无济于事。

关于为什么会出现这种情况的任何想法,以及如何将其删除?

谢谢!

1 个答案:

答案 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作为输入......目前尚不清楚你的函数参数是对象名称的对象还是字符串。