在不卸载包的情况下更改search()位置

时间:2014-04-19 16:10:48

标签: r

我使用的代码依赖于两个冲突的包。我想在短时间内给予一个优先级,我的计划是将它移到搜索()的前面。但是,我无法卸载和重新加载。我试过了,它会导致其他问题,并且在已经加载的包上运行library不起作用。

以下是一个示例(真实用例涉及非CRAN包):

library(ggplot2)
library(MASS)

> search()
 [1] ".GlobalEnv"        "package:MASS"      "package:ggplot2"  
 [4] "package:stats"     "package:graphics"  "package:grDevices"
 [7] "package:utils"     "package:datasets"  "package:methods"  
[10] "Autoloads"         "package:base"     

我现在如何移动包:ggplot2在包之前:MASS没有分离/卸载ggplot2?

修改

在我需要调用的函数内部,比如function1,有一个表达式可以进一步调用。我无法修改这些调用以追加::

e.g。

unchangeable <- function1("abc") ~ function2("def")

假设mainFun是我想要呼叫的人。我能做到

mainFun(unchangeable)

但我无法指定

mainFun::unchangeable

确实可以通过操纵公式对象来编辑unchangeable。但这并不理想,我需要一个更通用的解决方案来处理其他类型的对象。

EDIT2:

这是一个例子,它显示了一个类似的问题。

library(mgcv)
library(gam)

y <- rnorm(100)
x <- rnorm(100)

thisformula <- y ~ s(x)

gamgam <- gam(thisformula)
# s <- mgcv::s
mgcvgam <- mgcv::gam(thisformula)

这给了我错误

Error: $ operator is invalid for atomic vectors

取消注释行s <- mgcv::s解决了这种情况下的问题。但在我更一般的情况下,它并没有,并且无论如何它似乎是一个黑客。如何在mgcv::gam中首先查找mgcv内调用的所有函数?

1 个答案:

答案 0 :(得分:1)

您可以使用::参考特定包中的功能。例如,ggplot2::labs将始终引用ggplot2下的该函数,即使它被某些后续加载的软件包掩盖了