如何将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
相关产品推荐
相关产品推荐

