This
x <- rnorm(100)
y <- rnorm(100)
gam(y ~ s(x))
## Family: gaussian
## Link function: identity
## Formula:
## y ~ s(x)
## Estimated degrees of freedom:
## 1 total = 2
## GCV score: 0.8116283
加载包时发生故障VGAM
:
library(VGAM)
gam(y ~ s(x))
##Error: $ operator is invalid for atomic vectors
两者都实现了s()
功能,但这不应该发生吗?这是mgcv
还是VGAM
包中的错误?
mgcv:gam
调用mgcv:interpret.gam
这是失败的地方。
interpret.gam
似乎解析了特殊函数(包括's')的公式,然后在公式的环境中计算s(x)
。这意味着它将从调用方找到当前"s"的任何内容。这可能是返回gam
不喜欢的东西的东西。
你不能像这样修复它:
> gam(y ~ mgcv::s(x))
Error in model.frame.default(formula = y ~ mgcv::s(x), drop.unused.levels = TRUE) :
invalid type (list) for variable 'mgcv::s(x)'
> gam(y ~ mgcv:::s(x))
Error in model.frame.default(formula = y ~ mgcv:::s(x), drop.unused.levels = TRUE) :
invalid type (list) for variable 'mgcv:::s(x)'
但你可以喜欢这样:
> s=mgcv:::s
> gam(y ~ s(x))
Family: gaussian
Link function: identity
Formula:
y ~ s(x)
Estimated degrees of freedom:
1 total = 2
GCV score: 0.9486058
因此,它不是两个包中的错误。您要求使用s(x)
进行赌博,并且碰巧当前已将s(x)
定义为与该gam
需求不兼容。你不能只是在那里插入任何旧函数。