gam与mgcv包报错:变量'ti(LOC_X)'类型无效(list)
解决GAM模型中
ti()函数报"invalid type (list)"错误的方法 我来帮你排查这个问题——你遇到的Error in model.frame.default(...) : invalid type (list) for variable 'ti(LOC_X)'错误确实有点矛盾,毕竟你已经通过str(shots)确认LOC_X是整数类型。下面是几个常见的排查和解决方向:
确认
ti()函数来自mgcv包
有时候其他R包可能会有同名的ti()函数,导致调用了错误的函数而非mgcv中的张量交互项函数。你可以直接指定包名来调用:league_model_19 <- gam(SHOT_MADE_FLAG ~ mgcv::ti(LOC_X) + mgcv::ti(LOC_Y) + mgcv::ti(LOC_X, LOC_Y), data = shots)或者先卸载可能冲突的包,再重新加载mgcv:
detach("package:可能冲突的包名", unload = TRUE) library(mgcv)验证列是否为真正的原子向量
虽然str()显示LOC_X是int类型,但有可能列实际上是列表型的整数(比如每个元素是长度为1的整数向量)。你可以用以下代码验证:is.vector(shots$LOC_X) # 正常应该返回TRUE is.list(shots$LOC_X) # 正常应该返回FALSE如果结果不符合预期,把列转换为普通原子向量:
shots$LOC_X <- unlist(shots$LOC_X) shots$LOC_Y <- unlist(shots$LOC_Y)重构数据框消除隐藏结构问题
有时候数据框在读取或处理过程中会产生一些隐藏的结构异常,你可以尝试重新构造数据框:shots <- as.data.frame(lapply(shots, unlist), stringsAsFactors = FALSE)之后再重新运行你的GAM模型代码。
更新mgcv包到最新版本
旧版本的mgcv包可能存在一些数据类型处理的bug,尝试更新包并重启R:update.packages("mgcv") # 重启R后再加载mgcv并运行模型 library(mgcv) league_model_19 <- gam(SHOT_MADE_FLAG ~ ti(LOC_X) + ti(LOC_Y) + ti(LOC_X, LOC_Y), data = shots)
内容的提问来源于stack exchange,提问作者lowlyprogrammer
相关产品推荐
相关产品推荐

