You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 20:28:11