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

如何将Parsnip创建的模型对象适配给仅支持基础R模型的函数?

如何将parsnip模型传入仅支持基础R模型对象的函数?

很多R包的工具函数(比如car::avPlots)只接受传统的基础R模型对象,但用tidymodels框架下的parsnip包创建的模型是封装后的特殊对象,直接传入会报错,就像你遇到的情况:

问题重现

基础R模型可以正常运行:

model <- lm(mpg ~ am + cyl + wt + hp, data = mtcars)
car::avPlots(model, terms = . ~ am + cyl + wt + hp)

但parsnip创建的模型直接传入会失败:

model_pars <-
  linear_reg() %>% 
  set_engine("lm") %>% 
  fit(mpg ~ am + cyl + wt + hp, data = mtcars)

# 此代码无法运行:
car::avPlots(model_pars, terms = . ~ am + cyl + wt + hp)

解决方法

parsnip模型内部其实包含了底层的基础R原生模型,用extract_fit_parsnip()函数就能把这个原生模型提取出来,之后就可以正常传给那些只支持原生模型的函数了。

修正后的代码:

# 加载所需包
library(tidymodels)
library(car)

# 创建parsnip线性模型
model_pars <-
  linear_reg() %>% 
  set_engine("lm") %>% 
  fit(mpg ~ am + cyl + wt + hp, data = mtcars)

# 提取底层的lm原生模型
base_model <- extract_fit_parsnip(model_pars)

# 现在可以正常调用avPlots
car::avPlots(base_model, terms = . ~ am + cyl + wt + hp)

补充说明

extract_fit_parsnip()是tidymodels专门提供的工具,不管你用parsnip封装的是lm、glm还是其他支持的引擎模型,都能通过这个函数提取出对应的原生基础R模型对象,完美兼容那些只认原生模型的函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 12:52:19