Как применить функцию update_role (или шаг) из рецептов к нескольким столбцам

Я использую recipes посылка из tidymodels. Я пытаюсьupdate_roleдля нескольких столбцов одновременно. Пример:

library(recipes)
library(dplyr)

cols_to_update = list()
cols_to_update[["a"]] <- c("mpg", "cyl")

mtcars %>% 
    recipe() %>% 
    update_role(cols_to_update[["a"]], new_role = "new_role")

Я получаю ошибку Error: Not all functions are allowed in step function selectors (e.g.c). See ?selections.Вот документация по выбору.
Я не могу набрать их все вручную.

1 ответ

Вот попытка решить проблему с помощью purrr::map. Код ниже работает, но, возможно, есть способы получше.

library(recipes)
library(dplyr)

cols_to_update <- list()
cols_to_update[["a"]] <- c("mpg", "cyl")


purrr::map(cols_to_update, function(x){
  mtcars %>%
    recipe() %>%
    update_role(x, new_role = "new_role")
})
#$a
#Data Recipe
#
#Inputs:
#
#     role #variables
# new_role          2
#
#  9 variables with undeclared roles

Редактировать.

Вот два других примера, первый с основанием R Map а другой с purrr::map. Оба они дают одинаковые результаты.

Список cols_to_update теперь имеет 2 участника, "a" а также "b".

cols_to_update[["b"]] <- c("disp", "wt", "carb")

Map(function(x, y){
  mtcars %>%
    recipe() %>%
    update_role(x, new_role = y)
}, cols_to_update, "new_role")

purrr::map(cols_to_update, function(x, y){
  mtcars %>%
    recipe() %>%
    update_role(x, new_role = y)
}, "new_role")
Другие вопросы по тегам