Utilisation du commutateur dans une commande mutate [duplicate]

Oct 27 2020

J'essaie d'appliquer une fonction personnalisée à l'aide d'un commutateur dans une commande mutate, mais je continue à recevoir l'erreur suivante.

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

Mon résultat final souhaité est une chaîne qui sera ensuite exécutée en tant que fonction.

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

Réponses

akrun Oct 27 2020 at 05:25

Nous pouvons utiliser rowwiseparce que la fonction est switchet switchprend un vectorde length1 pour 'EXPR'

Selon ?switch

EXPR - une expression évaluant un nombre ou une chaîne de caractères.

Donc, ce ne sont pas des nombres ou des chaînes

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