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