J'essaye de construire une fonction qui me permettra d'exécuter des fonctions sur des colonnes commençant par un préfixe spécifique. J'ai du mal à comprendre comment obtenir les noms à évaluer à la bonne chose.Dplyr Tidyyeval pour les noms de variable construits
J'ai regardé le site Web dplyr
où il est question de programming mais je n'arrivais pas à trouver comment l'évaluer correctement.
Je me sers de la version la plus récente de dplyr
sur CRAN (v0.70) où @hadley a introduit tidyeval
Reprex
library(tidyverse)
tbl1 <- tibble(
urn = c(1 ,2 ,3),
a_width = c(10,20,30),
a_height = c(12,13,14),
b_width = c(25,50,75),
b_height = c(25,50,75)
)
my_mean <- function(x, group) {
width <- paste0(quo_name(group), "_width")
height <- paste0(quo_name(group), "_height")
summarise(x,
!!paste0(group, "_mean_width") := mean(!!width),
!!paste0(group, "_mean_height") := mean(!!height)
)
}
my_mean(tbl1, "a")
# # A tibble: 1 x 2
# a_mean_width a_mean_height
# <dbl> <dbl>
# 1 NA NA
# Warning messages:
# 1: In mean.default("a_width") :
# argument is not numeric or logical: returning NA
# 2: In mean.default("a_height") :
# argument is not numeric or logical: returning NA
Je pense que vous avez manqué une virgule dans la commande 'summarise'. – amarchin
Vous avez raison, la virgule a été manquée mais c'est plus un cas de ma mauvaise frappe, plutôt que la cause du problème. – Dan
Bien sûr, j'essayais juste de reproduire votre erreur et la virgule ratée rendait cela impossible :) – amarchin