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
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?
George Harrison ficou chateado por suas letras de 'Hurdy Gurdy Man' de Donovan não terem sido usadas