如何从 R 中的特定包中分离所有对象和方法? [复制]
Posted
技术标签:
【中文标题】如何从 R 中的特定包中分离所有对象和方法? [复制]【英文标题】:How do I detach all objects and methods from a specific package in R? [duplicate] 【发布时间】:2016-03-16 19:06:46 【问题描述】:我需要在一个 R 会话中加载和分离很多包(我正在查看哪些函数是跨不同包的方法)。 detach()
不适用于我想要的,因为它不会从环境中删除所有内容;例如,如果你运行:
require(pomp)
detach('package:pomp', character.only = TRUE)
print(methods('show'))
show,pomp.fun-method
仍在列出,这不是基础 R 中存在的方法。如何删除与包关联的 所有 方法和对象?或者,有没有办法在 R 中创建一个临时环境来加载包,然后我可以销毁它以删除包中方法中的所有对象?
【问题讨论】:
使用 packrat ***.com/questions/24283171/virtual-environment-in-r 试试detach('package:pomp', unload = TRUE, character.only = TRUE)
或devtools::unload(pkg = "pomp")
。 unload
的帮助提供了一些关于 S4 课程为什么会遇到困难的信息。
我想尽可能只使用基本 R 函数,所以我宁愿不使用 devtools::unload
,但 detach
的 unload
选项似乎正在工作。 @ialm 如果您将其作为答案提交,我可以接受。
【参考方案1】:
要尝试卸载在加载包时加载的命名空间,您必须在detach()
中设置参数unload = TRUE
。
在你的例子中:
detach('package:pomp', unload = TRUE, character.only = TRUE)
但是,如果您阅读文档 (?detach
) 中的详细信息,则需要注意一些事项:
如果一个包有一个命名空间,默认情况下分离它不会卸载 命名空间(甚至可能没有 unload = TRUE),并分离 通常不会卸载任何动态加载的编译代码 (DLL)。此外,来自命名空间的注册 S3 方法将不会 删除。如果你在一个加载了命名空间的包上使用库,它 附加已加载命名空间的导出。如此分离和 重新附加一个包可能不会刷新部分或所有组件 包,不建议使用。
强调我的。请注意它可能并不总是有效。
【讨论】:
以上是关于如何从 R 中的特定包中分离所有对象和方法? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何从 PySpark DataFrame 的列中分离特定字符并使用它们形成一个新列?