问题描述
我正在尝试学习 R 的建模框架 tidymodels。创建模型并指定要用于模型的包(引擎)后,我现在尝试使用我选择的引擎内部的一些特定功能。在这种情况下,我尝试使用的是 randomForest 包和 varImpPlot() 函数。但是,当我尝试执行它时会出现此错误,它说为了使用该函数,对象必须是 randomForest 对象。嗯,这是显而易见的,但我的问题是,是否有某种方法可以将欧洲防风草对象转换为我选择的引擎对象,或者有什么方法可以在我选择的包内使用这些功能?感谢帮助!
model_rand_forest <- rand_forest() %>%
set_engine("randomForest") %>%
set_mode("regression") %>%
translate()
training_workflow <- workflow() %>%
add_recipe(recipe) %>%
add_model(model_rand_forest)
training_workflow_fit <- training_workflow %>% fit(data = train)
training_workflow_fit %>% varImpPlot()
training_workflow_fit %>% varImpPlot()
Error in varImpPlot(.) :
This function only works for objects of class `randomForest'
解决方法
您可以使用 randomForest
从 workflow
中提取 $fit$fit$fit
对象。在您的示例中,这应该有效
training_workflow_fit$fit$fit$fit %>% varImpPlot()
或者你可以使用下面的语法,它可能更简洁
training_workflow_fit %>%
chuck("fit") %>%
chuck("fit") %>%
chuck("fit") %>%
varImpPlot()