добавить последовательность шагов до конца рецепта в г - PullRequest
1 голос
/ 25 февраля 2020

Цель состоит в том, чтобы иметь возможность добавлять последовательность новых шагов в конце рецепта, где новые шаги передаются в качестве аргументов функции.

Я могу делать то, что хочу, с for l oop:

library(tidyverse)
suppressPackageStartupMessages(library(recipes))
suppressPackageStartupMessages(library(rlang))

add_steps_to_recipe <- function(rec, new_steps) {
  rec_new <- rec
  for (i in seq_along(new_steps)) {
    rec_new <- eval_tidy(expr(rec_new %>% !!new_steps[[i]]))
  }
  return(rec_new)
}

.pred_date <- as.Date("2015-01-15")

mtcars2 <- mtcars %>% mutate(hp_date = as.Date("2015-01-01"))
mtcars2$hp_date[1:2] <- as.Date("2015-02-01")

rec1 <- recipe(mtcars2, mpg ~ hp + hp_date)

new_steps <- exprs(
  step_mutate(hp = ifelse(hp_date < .pred_date, hp, as.numeric(NA))),
  step_meanimpute(hp)
)

rec2 <- add_steps_to_recipe(rec1, new_steps)

juice(prep(rec2))

Я не могу заставить его работать без использования for l oop:

new_steps <- expr(
  step_mutate(hp = ifelse(hp_date < .pred_date, hp, as.numeric(NA))) %>% step_meanimpute(hp)
)

add_steps_to_recipe <- function(rec, new_steps) {
  eval_tidy(expr(rec %>% !!new_steps))
}

rec2 <- add_steps_to_recipe(rec1, new_steps)
#> Error in `%>%`(., step_mutate(hp = ifelse(hp_date < .pred_date, hp, as.numeric(NA))), : unused argument (step_meanimpute(hp))

juice(prep(rec2))
#> Error in prep(rec2): object 'rec2' not found

Создано в 2020-02-24 пакетом представ (v0.3.0)

Проблема вызвана труба в new_steps. Если я просто добавлю один шаг, он отлично работает. Я также заметил, что у выражения без кавычек есть дополнительный набор скобок. Есть ли способ удалить лишние скобки после кавычек?

...