如何从R中的特定包中分离所有对象和方法?

时间:2015-12-10 23:50:38

标签: r methods environment-variables s4

我需要在一个R会话中加载和分离很多包(我正在查看哪些函数是跨不同包的方法)。 detach()不能满足我的需求,因为它不会从环境中删除所有内容;例如,如果你运行:

require(pomp)
detach('package:pomp', character.only = TRUE)
print(methods('show'))

仍会列出show,pomp.fun-method,这不是基础R中存在的方法。如何删除与包关联的所有方法和对象?或者,有没有办法在R中创建一个临时环境来加载包,然后我可以销毁它以删除包中方法中的所有对象?

1 个答案:

答案 0 :(得分:2)

要尝试卸载加载包时加载的命名空间,必须在unload = TRUE中设置参数detach()

在你的例子中:

detach('package:pomp', unload = TRUE, character.only = TRUE)

但是,如果您阅读了文档(?detach)中的详细信息,则需要注意以下事项:

  

如果包具有命名空间,则默认情况下不会卸载它   命名空间( ,甚至可能没有unload = TRUE ),并且分离   通常不会卸载任何动态加载的编译代码   (DLL)中。此外,命名空间中注册的S3方法不会   除去。如果在加载了命名空间的包上使用库,则为   附加已加载的命名空间的导出。如此分离和   重新附加包可能无法刷新部分或全部组件   包装,并且是不可取的。

强调我的。要小心,它可能并不总是有效。