您可以通过执行以下操作从包命名空间中获取所有函数作为环境:
getNamespace("ggplot2")
Run Code Online (Sandbox Code Playgroud)
因此,您可以library通过执行以下操作将它们附加到您的搜索路径(类似于使用未导出的函数调用):
attach(getNamespace("ggplot2"))
Run Code Online (Sandbox Code Playgroud)
如果您更喜欢列表中的它们,则可以执行
as.list(getNamespace("ggplot2"))
Run Code Online (Sandbox Code Playgroud)
或者,如果您希望它们出现在全局工作区中,您可以执行以下操作:
list2env(as.list(getNamespace("ggplot2")), globalenv())
Run Code Online (Sandbox Code Playgroud)
不用说,你应该只在交互式会话中做这种事情,而不是在编写包时。
修复此类错误的最佳方法是将修改后的函数的环境设置为与原始函数相同的环境。例如,要修复extpack::badfn使用
badfn <- function(...) { ... } # new version in your global workspace
environment(badfn) <- environment(extpack::badfn)
Run Code Online (Sandbox Code Playgroud)
这意味着它在调用时会看到私有函数,但不会extpack::badfn在原始位置替换,因此extpack调用它的其他函数仍会调用原始位置。如果您希望他们打电话给您,请使用
assignInNamespace("badfn", badfn, "extpack")
Run Code Online (Sandbox Code Playgroud)
进行上述更改后。
如果导入其他一些包extpack::badfn,它得到的内容将取决于确切的操作顺序,因此在这种情况下,您最好硬着头皮并在适当的修复后重建整个包。