我需要在一个R会话中加载和分离很多包(我正在查看哪些函数是跨不同包的方法)。 detach()
不能满足我的需求,因为它不会从环境中删除所有内容;例如,如果你运行:
require(pomp)
detach('package:pomp', character.only = TRUE)
print(methods('show'))
仍会列出show,pomp.fun-method
,这不是基础R中存在的方法。如何删除与包关联的所有方法和对象?或者,有没有办法在R中创建一个临时环境来加载包,然后我可以销毁它以删除包中方法中的所有对象?
答案 0 :(得分:2)
要尝试卸载加载包时加载的命名空间,必须在unload = TRUE
中设置参数detach()
。
在你的例子中:
detach('package:pomp', unload = TRUE, character.only = TRUE)
但是,如果您阅读了文档(?detach
)中的详细信息,则需要注意以下事项:
如果包具有命名空间,则默认情况下不会卸载它 命名空间( ,甚至可能没有unload = TRUE ),并且分离 通常不会卸载任何动态加载的编译代码 (DLL)中。此外,命名空间中注册的S3方法不会 除去。如果在加载了命名空间的包上使用库,则为 附加已加载的命名空间的导出。如此分离和 重新附加包可能无法刷新部分或全部组件 包装,并且是不可取的。
强调我的。要小心,它可能并不总是有效。