Considere este código:
library(dplyr)
a = data.frame(a = 1:3)
abc = \(x) data.frame(x/2, x/3)
a %>%
mutate(abc(a))
que retorna
a x.2 x.3
1 1 0.5 0.3333333
2 2 1.0 0.6666667
3 3 1.5 1.0000000
mas não tenho controle sobre os nomes, pois quero atribuir outra coisa a eles.
abc
Uma maneira de resolver isso é nomear o tipo de retorno, mas isso não é o ideal, pois posso querer executar abc
em dois conjuntos de variáveis
a %>%
mutate(abc(a), abc(b))
A outra maneira é, claro, rename
depois de cada execução, abc
mas isso pode ser instável.
Existe alguma maneira de dar nomes à saída de abc
? por exemplo
a %>%
mutate(c("a1","a2") := abc(a), c("b1","b2") := abc(b))
Mas a :=
sintaxe acima não funcionou.
Tente o
.unpack=
argumento deacross
. Aquiabc
está a função não modificada na questão.ou talvez esta variação:
Uma opção seria adicionar um argumento opcional para nomear a saída e/ou definir os nomes da saída com base no nome da coluna de entrada, por exemplo:
Isso me parece estranho; como se fosse melhor reestruturar seus dados primeiro, mas sem mais contexto, não posso dizer com certeza.
Aqui está apenas uma opção R básica, onde você pode usar
lapply
comunname
+as.data.frame
para atingir seu objetivo, simplesmentedados
Talvez
mutate
não seja a maneira correta de fazer isso. Por que não usarbind_cols()
andrename()
?(
group_by
adicionado apenas para provar que isso funciona mesmo com dados agrupados)Talvez uma
mutate
função personalizada? Embora eu pessoalmente prefira a solução de anjama , que faz praticamente a mesma coisa, mas dentro do mutate regular.