Usando switch dentro de um comando mutate [duplicar]

Oct 27 2020

Estou tentando aplicar uma função personalizada usando switch dentro de um comando mutate, mas continuo recebendo o seguinte erro.

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

Meu resultado final desejado é uma string que será executada posteriormente como uma função.

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))

Respostas

akrun Oct 27 2020 at 05:25

Nós podemos usar rowwiseporque a função é switche switchleva um vectorde length1 para 'EXPR'

De acordo com ?switch

EXPR - uma expressão avaliada em um número ou string de caracteres.

Então, não são números ou strings

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