【问题标题】:wrap tidymodels recipe into function将 tidymodels 配方包装到函数中
【发布时间】:2021-11-11 05:45:20
【问题描述】:

是否可以将tidymodel 配方包装到函数中?我尝试了以下方法:

# Data setup
library(tidyverse)
library(tidymodels)

parks <- readr::read_csv('https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2021/2021-06-22/parks.csv')

modeling_df <- parks %>% 
  select(pct_near_park_data, spend_per_resident_data, med_park_size_data) %>% 
  rename(nearness = "pct_near_park_data",
         spending = "spend_per_resident_data",
         acres = "med_park_size_data") %>% 
  mutate(nearness = (parse_number(nearness)/100)) %>% 
  mutate(spending = parse_number(spending))

# Start building models
set.seed(123)
park_split <- initial_split(modeling_df)
park_train <- training(park_split)
park_test <- testing(park_split)

没有功能也很好用:

tree_rec <- recipe(nearness ~., data = park_train)

问题:将配方包装到函数中:

custom_rec <- function(dat, var){
  tree_rec <- recipe(nearness ~ {{var}}, data = dat)
}

custom_rec(park_train, speeding)

错误:

Error during wrapup: No in-line functions should be used here; use steps to define baking actions.
Error: no more error handlers available (recursive errors?); invoking 'abort' restart

【问题讨论】:

    标签: r recipe tidymodels


    【解决方案1】:

    R 公式是一个extremely useful but weird, weird thing,所以我不建议在您遇到的这种情况下尝试使用它。

    请尝试使用update_role() 界面来创建食谱:

    library(tidymodels)
    library(modeldata)
    data(biomass)
    
    # split data
    biomass_tr <- biomass[biomass$dataset == "Training",]
    
    my_rec <- function(dat, preds) {
      recipe(dat) %>%
        update_role({{preds}}, new_role = "predictor") %>%
        update_role(HHV, new_role = "outcome") %>%
        update_role(sample, new_role = "id variable") %>%
        update_role(dataset, new_role = "splitting indicator")
    }
    
    my_rec(biomass_tr, carbon) %>% prep() %>% summary()
    #> # A tibble: 8 × 4
    #>   variable type    role                source  
    #>   <chr>    <chr>   <chr>               <chr>   
    #> 1 sample   nominal id variable         original
    #> 2 dataset  nominal splitting indicator original
    #> 3 carbon   numeric predictor           original
    #> 4 hydrogen numeric <NA>                original
    #> 5 oxygen   numeric <NA>                original
    #> 6 nitrogen numeric <NA>                original
    #> 7 sulfur   numeric <NA>                original
    #> 8 HHV      numeric outcome             original
    my_rec(biomass_tr, c(carbon, hydrogen, oxygen, nitrogen)) %>% prep() %>% summary()
    #> # A tibble: 8 × 4
    #>   variable type    role                source  
    #>   <chr>    <chr>   <chr>               <chr>   
    #> 1 sample   nominal id variable         original
    #> 2 dataset  nominal splitting indicator original
    #> 3 carbon   numeric predictor           original
    #> 4 hydrogen numeric predictor           original
    #> 5 oxygen   numeric predictor           original
    #> 6 nitrogen numeric predictor           original
    #> 7 sulfur   numeric <NA>                original
    #> 8 HHV      numeric outcome             original
    

    reprex package (v2.0.1) 于 2021-09-21 创建

    如果你设置在公式界面,不妨试试rlang::new_formula()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-31
      • 2021-12-11
      • 2014-11-09
      • 1970-01-01
      • 2014-07-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多