【发布时间】:2019-06-02 18:11:48
【问题描述】:
我正在尝试探索“gam”函数在 mgcv 包与 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)
有没有一种方法可以在一个会话中同时运行两个游戏功能?
下面是输出:
> 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' 屏蔽。
【问题讨论】:
-
尝试在
mgcv之前加载gam包。看看这是否有所作为。 -
我无法重现此问题。您能否:(1) 在新的 R 会话中尝试此代码,如果仍然收到错误消息,(2) 编辑您的问题以包含来自
sessionInfo()的输出? -
@duckmayr 感谢 cmets。见更新。此外,正如 Shree 猜测的那样,加载顺序会有所不同。
-
@TimW 感谢您的更新。 “加载 mgcv 的部分原因是您不能再在 gam 中使用某些功能?”这个问题的答案是否定的。当一个函数被另一个函数屏蔽时,您仍然可以使用命名空间运算符 (
::) 访问它。如果两个包具有相同名称的函数,如果没有指定命名空间,则使用 last 加载的包中的函数。这就是为什么您会收到有关屏蔽的警告 - 如果您未通过gam::或mgcv::指定,它可以帮助您跟踪将调用哪个包的函数 -
@duckmayr 我仍然很困惑。当我在 mgcv 之前加载 gam 时,我在运行“gam.m3