R plot.gam错误“;1:对象$nsdf:长度为0的参数中出错;

R plot.gam错误“;1:对象$nsdf:长度为0的参数中出错;,r,plot,regression,gam,mgcv,R,Plot,Regression,Gam,Mgcv,我试图在R中绘制一个gam对象,这是我用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 us

我试图在R中绘制一个gam对象,这是我用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)
库(gam)
库(ISLR)#包含此处使用的工资数据集

gam.mod如果仍然收到此消息,则需要将
mgcv
gam
软件包更新至最新版本。2018年2月,
gam
软件包发生了重大变化:。这意味着,由
GAM
程序包安装的GAM现在具有“GAM”类,即使加载了
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")
  }


谢谢你的回答。我从未实际加载过
mgcv
,我只是假设它是
gam
的依赖项。我启动了一个新的R会话,您提供的代码工作正常。我发现实际上是
car
库导致了相同的问题

mgcv
gam
并不相互依赖,但由于
mgcv
gam
更受欢迎,许多软件包依赖于
mgcv
,例如:


注意“导入”字段,
library(car)
将同时加载这些包。

我的
mgcv
版本是1.8-28,但我仍然存在此问题。考虑将所有字符变量转换为因子并重写<代码> GAMD()> <代码>或<代码> BAN()/<代码>。它对我有用

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)
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