Как применить функцию 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")