如何在两个具有相同名称的不同库中使用2个不同功能

时间:2019-06-02 18:11:48

标签: r libraries gam mgcv

我正在尝试探索mgcv软件包与gam软件包中“ gam”功能的工作方式的差异。但是,我无法在一个R会话中同时运行这两个gam函数。我以为如果我以mgcv :: gam或gam :: gam开头,它将能够运行正确的功能,但是看起来我必须分离mgcv才能在gam软件包中运行gam函数。

library(ISLR)
library(mgcv)
library(gam)

# I get an error message when it runs this
gam.m3 <- gam::gam(wage~s(year,4)+s(age,5)+education,data=Wage)

# No error message when I detach mgcv
detach(package:mgcv)
gam.m3 <- gam::gam(wage~s(year,4)+s(age,5)+education,data=Wage)

是否可以在一个会话中同时运行两个gam函数?

下面是输出:

> library(ISLR)
> library(mgcv)
> library(gam)
> #I get an error message when it runs this
> gam.m3 <- gam::gam(wage~s(year,4)+s(age,5)+education,data=Wage)
Error in terms.formula(reformulate(term[i])) : 
  invalid model formula in ExtractVars
> #No error message when I detach mgcv
> detach(package:mgcv)
> gam.m3 <- gam::gam(wage~s(year,4)+s(age,5)+education,data=Wage)
Warning message:
In model.matrix.default(mt, mf, contrasts) :
  non-list contrasts argument ignored

更新:我通过一个干净的R会话重新运行了这个故事,但情况不同。之前,我清除了工作空间,但没有清除的R会话。现在,如果我运行干净,则gam.m3模型似乎可以正常工作。但是-如果在mgcv之前更改库加载和加载gam的顺序,则会遇到相同的错误。在加载gam之后加载mgcv时,我确实收到了以下消息:

The following objects are masked from ‘package:gam’:

gam, gam.control, gam.fit, s

所以我想加载mgcv只是部分原因,就是您不能再在gam中使用某些功能了?真烦人仅供参考,在加载mgcv之后加载gam时,我收到类似的警告消息-某些对象将从'package:mgcv'中屏蔽。

1 个答案:

答案 0 :(得分:2)

如我对your other question的回答所示,您不能使用gam::s

但是,您可以告诉R在gam程序包名称空间中评估调用:

library(ISLR)
library(gam)

fit1 <- gam(wage~s(year,4)+s(age,5)+education,data=Wage)

library(mgcv)

gam::gam(wage~s(year,4)+s(age,5)+education,data=Wage)
#errors

fit2 <- eval(quote(gam(wage~s(year,4)+s(age,5)+education,data=Wage)), 
               envir = asNamespace("gam"))
#works

all.equal(coef(fit1), coef(fit2))
#[1] TRUE