Usando switch dentro de un comando mutate [duplicar]

Oct 27 2020

Estoy tratando de aplicar una función personalizada usando el interruptor dentro de un comando de mutación, pero sigo recibiendo el siguiente error.

Error: Problem with `mutate()` input `new_col`.
x EXPR must be a length 1 vector
ℹ Input `new_col` is `example_func(col_name, trans)`.

Mi resultado final deseado es una cadena que luego se ejecutará como una función.

library(tidyverse)

## sample function
example_func <- function(pred, trans) {
  switch(trans,
         "None" = pred,
         "Squared" = paste0(pred, "^2")
  )
}

## test function (works)
example_func("b", "")

## data
dat <- data.frame(col_name = c("a", "b"),
                  trans = c("Squared", "None"))

## desired end result
dat[["new_col"]] <- c("a^2", "b")
dat

## trying to apply function to data (fails)
dat %>% 
  mutate(new_col = example_func(col_name, trans))

Respuestas

akrun Oct 27 2020 at 05:25

Podemos usar rowwiseporque la función es switchy switchtoma un vectorde length1 para 'EXPR'

De acuerdo a ?switch

EXPR: una expresión que evalúa un número o una cadena de caracteres.

Entonces, no son números ni cadenas

library(dplyr)
dat %>% 
   rowwise %>% 
   mutate(new_col = example_func(col_name, trans)) %>%
   ungroup