R plot.gam 错误 "Error in 1:object$nsdf : argument of length 0"
R plot.gam Error "Error in 1:object$nsdf : argument of length 0"
我正在尝试在 R 中绘制一个 gam 对象,这是我用 gam 包制作的。我收到了 Error in 1:object$nsdf : argument of length 0 when using plot.gam 中报告的相同错误。但是,在那里找到的解决方案更新到最新版本(我认为)对我不起作用。我是 运行 R 3.3.1、gam 1.12 和 mgcv 1.8.12(mgcv 是 plot.gam 函数的来源)。
很遗憾,我无法共享我正在使用的数据。但是,以下代码——直接从简介的 p.294 中提取。使用 R 进行统计学习——为我重现错误:
library(gam)
library(ISLR) # contains the Wage dataset used here
gam.mod <- gam(wage ~ s(year, 4) + s(age, 5) + education, data = Wage)
plot(gam.mod)
有人知道这里发生了什么或如何解决它吗?
谢谢。
如果您仍然收到此消息,则需要将 mgcv
和 gam
软件包更新到最新版本。 2018 年 2 月对 gam
包进行了重大更改:。这意味着,gam
包安装的GAM现在有"Gam"class,即使加载了mgcv
包,plot
也不会选择mgcv::plot.gam
] 绘制它。
但是,将两个包都放在一个 R 会话中仍然是不安全的。所以2016年提出的以下建议还是非常推荐的
建议
使用这个玩具功能来检查 R 会话是否适合 运行 GAM 分析可能是个好主意。
GAM_status <- function () {
if (all(c("gam", "mgcv") %in% .packages())) print("Not OK")
else print("OK")
}
nsdf
是严格自由度数,专用于mgcv
的术语。正如您提到的:mgcv
是 plot.gam
函数的来源。
问题是您的 R 会话中同时有 gam
和 mgcv
这两个不兼容的包。你用 gam::gam
拟合你的 gam.mod
,然后用 mgcv::plot.gam
.
绘制模型
请注意,通常使用 ::
的情况在这里将失效。通常当两个包有一些内部屏蔽功能时,::
是补救措施。但是,对于mgcv
和gam
,这是完全不可能的。所以我的建议是,如果您使用 gam
,请不要在您的 R 会话中触摸 mgcv
,反之亦然。
所以,我开始一个新的 R 会话,并执行以下操作,一切都很好!
library(gam)
library(ISLR) # contains the Wage dataset used here
gam.mod <- gam(wage ~ s(year, 4) + s(age, 5) + education, data = Wage)
par(mfrow = c(2,2)); plot(gam.mod)
Thank you for your answer. I never actually loaded mgcv
, I just assumed it was a dependency for gam
. I started a fresh R session and the code you provided worked. I found that it is actually the car
library that is causing the same issue.
mgcv
和 gam
不相互依赖,但是由于 mgcv
比 gam
更受欢迎,所以很多包都依赖 mgcv
, 例如 car
:
car: Companion to Applied Regression
Functions and Datasets to Accompany J. Fox and S. Weisberg, An R Companion to
Applied Regression, Second Edition, Sage, 2011.
Version: 2.1-3
Depends: R (≥ 3.2.0)
Imports: MASS, mgcv, nnet, pbkrtest (≥ 0.4-4), quantreg, grDevices, utils,
stats, graphics
注意"Imports"字段,library(car)
会同时加载这些包。
我的mgcv
版本是1.8-28,但是还是有这个问题。考虑将所有 char 变量转换为因子并重新运行 gam()
或 bam()
。它对我有用。
我正在尝试在 R 中绘制一个 gam 对象,这是我用 gam 包制作的。我收到了 Error in 1:object$nsdf : argument of length 0 when using plot.gam 中报告的相同错误。但是,在那里找到的解决方案更新到最新版本(我认为)对我不起作用。我是 运行 R 3.3.1、gam 1.12 和 mgcv 1.8.12(mgcv 是 plot.gam 函数的来源)。
很遗憾,我无法共享我正在使用的数据。但是,以下代码——直接从简介的 p.294 中提取。使用 R 进行统计学习——为我重现错误:
library(gam)
library(ISLR) # contains the Wage dataset used here
gam.mod <- gam(wage ~ s(year, 4) + s(age, 5) + education, data = Wage)
plot(gam.mod)
有人知道这里发生了什么或如何解决它吗?
谢谢。
如果您仍然收到此消息,则需要将 mgcv
和 gam
软件包更新到最新版本。 2018 年 2 月对 gam
包进行了重大更改:gam
包安装的GAM现在有"Gam"class,即使加载了mgcv
包,plot
也不会选择mgcv::plot.gam
] 绘制它。
但是,将两个包都放在一个 R 会话中仍然是不安全的。所以2016年提出的以下建议还是非常推荐的
建议
使用这个玩具功能来检查 R 会话是否适合 运行 GAM 分析可能是个好主意。
GAM_status <- function () {
if (all(c("gam", "mgcv") %in% .packages())) print("Not OK")
else print("OK")
}
nsdf
是严格自由度数,专用于mgcv
的术语。正如您提到的:mgcv
是 plot.gam
函数的来源。
问题是您的 R 会话中同时有 gam
和 mgcv
这两个不兼容的包。你用 gam::gam
拟合你的 gam.mod
,然后用 mgcv::plot.gam
.
请注意,通常使用 ::
的情况在这里将失效。通常当两个包有一些内部屏蔽功能时,::
是补救措施。但是,对于mgcv
和gam
,这是完全不可能的。所以我的建议是,如果您使用 gam
,请不要在您的 R 会话中触摸 mgcv
,反之亦然。
所以,我开始一个新的 R 会话,并执行以下操作,一切都很好!
library(gam)
library(ISLR) # contains the Wage dataset used here
gam.mod <- gam(wage ~ s(year, 4) + s(age, 5) + education, data = Wage)
par(mfrow = c(2,2)); plot(gam.mod)
Thank you for your answer. I never actually loaded
mgcv
, I just assumed it was a dependency forgam
. I started a fresh R session and the code you provided worked. I found that it is actually thecar
library that is causing the same issue.
mgcv
和 gam
不相互依赖,但是由于 mgcv
比 gam
更受欢迎,所以很多包都依赖 mgcv
, 例如 car
:
car: Companion to Applied Regression
Functions and Datasets to Accompany J. Fox and S. Weisberg, An R Companion to
Applied Regression, Second Edition, Sage, 2011.
Version: 2.1-3
Depends: R (≥ 3.2.0)
Imports: MASS, mgcv, nnet, pbkrtest (≥ 0.4-4), quantreg, grDevices, utils,
stats, graphics
注意"Imports"字段,library(car)
会同时加载这些包。
我的mgcv
版本是1.8-28,但是还是有这个问题。考虑将所有 char 变量转换为因子并重新运行 gam()
或 bam()
。它对我有用。