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

使用map()调用GAM模型失败,LM模型可正常运行的问题求助

问题:crossv_mc批量训练GAM模型失败,LM模型正常
  • 场景:使用modelr::crossv_mc拆分mtcars数据集,用purrr::map批量训练模型时,LM模型可以正常运行,但GAM模型报错。单独调用gam(mpg~wt, data=mtcars)则正常。

原因

crossv_mc生成的train列里的对象是resample类(并非普通数据框),lm函数内部会自动识别并转换这类对象为数据框,但mgcv::gam不会做这个自动转换,它要求data参数必须是标准数据框类型。

解决方法

方法1:手动将resample对象转为数据框

修改GAM模型的定义函数,把传入的df用as.data.frame()转换:

fn_model <- function(df){
  mgcv::gam(mpg ~ wt, data = as.data.frame(df))
}

df_split_model <-
  df_split %>%
  mutate(model = map(train, fn_model)) %>%
  print()

方法2:使用modelr的model_train函数

modelr包提供的model_train函数可以自动处理resample对象,无需手动转换:

fn_model <- function(df){
  model_train(df, mpg ~ wt, mgcv::gam)
}

df_split_model <-
  df_split %>%
  mutate(model = map(train, fn_model)) %>%
  print()

验证

运行上述修正后的代码,GAM模型就能像LM模型一样批量训练成功了。

内容的提问来源于stack exchange,提问作者adrianmnc

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 10:07:37