r语言 - step_mutate() 找不到函数 str_remove()



我有一个step_mutate()函数的配方,在泰坦数据集上执行文本数据转换,由stringr包支持。

library(tidyverse)
library(tidymodels)
extract_title <- function(x) stringr::str_remove(str_extract(x, "Mr\.? |Mrs\.?|Miss\.?|Master\.?"), "\.")
rf_recipe <- 
recipe(Survived ~ ., data = titanic_train) %>% 
step_impute_mode(Embarked) %>% 
step_mutate(Cabin = if_else(is.na(Cabin), "Yes", "No"),
Title = if_else(is.na(extract_title(Name)), "Other", extract_title(Name))) %>% 
step_impute_knn(Age, impute_with = c("Title", "Sex", "SibSp", "Parch")) %>% 
update_role(PassengerId, Name, new_role = "id")

这组变换在rf_recipe %>% prep() %>% bake(new_data = NULL)中工作得很好。

当我尝试在工作流中拟合具有超参数调谐和10倍交叉验证的随机森林模型时,所有模型都失败了。.notes列的输出明确表示mutate()Title有问题:找不到str_remove()函数。

doParallel::registerDoParallel()
rf_res <- 
tune_grid(
rf_wf,
resamples = titanic_folds,
grid = rf_grid,
control = control_resamples(save_pred = TRUE)
)

正如这篇文章所建议的,我已经明确告诉R, str_remove应该在stringr包中找到。为什么这不起作用,是什么导致的?

我不认为这将修复错误,但只是在情况下str_extract函数不是写stringr:: str_extract,你加载包吗?

出现错误是因为step_knn_impute()和随后的gower::gower_topn函数将所有字符转换为因子。为了克服这个问题,我不得不应用prep()bake()函数,而不将配方包含在工作流中。

prep_recipe <- prep(rf_recipe)  
train_processed <- bake(prep_recipe, new_data = NULL)
test_processed <- bake(prep_recipe, new_data = titanic_test %>%
mutate(across(where(is.character), as.factor)))

现在模型收敛了。

相关内容

  • 没有找到相关文章