2017-09-12 3 views
2

J'ai utilisé un motif standard lors de l'utilisation des fonctions mpl de dplyr. Voici un exemple de jouet (seulement pour prouver un point):Modèle de programmation Dplyr pour muter

myFunction = function(colname) { 
    dots <- setNames(list(lazyeval::interp(~ifelse(x>25, x*10, x/10), x = quote(colname))), "my_new_col") 
    mutate_(mtcars, .dots = dots) 
} 

J'ai fait cela en fonction de ne pas taper à chaque fois. Mais ceci est plutôt verbeux et je ne suis pas sûr qu'il existe un moyen plus simple de paramétrer les appels à mutate_. Suggestions?

+4

Qu'essayez-vous de faire avec ce code? – useR

+0

Ceci est juste un exemple de jouet. J'essaie de paramétrer les appels à mplate de dplyr et de les filtrer en les mettant dans une fonction. – Sid

+0

"fait en sorte qu'il ne soit pas typé à chaque fois". Tapez quoi dehors exactement? Peut-être pourriez-vous donner un exemple où vous ne le mettez pas dans une fonction. Votre exemple de jouet n'a pas de «filtre» – useR

Répondre

0

Je suppose que votre fonction essaye de créer une nouvelle colonne basée sur une colonne existante. Voici la fonction utilisant l'approche tidyeval. Voir Programming with dplyr pour plus de détails.

myFunction = function(df, col, new_col) { 
    col <- enquo(col) 
    new_col <- quo_name(enquo(new_col)) 

    df %>% 
     mutate(!!new_col := ifelse((!!col) > 25, (!!col) * 10, (!!col)/10)) 
} 

myFunction(mtcars, mpg, mpg_based_new_col)