pipe ou tuyaux Flashcards
symbole
%>%
Présentation
Utilisez %>% pour mettre en valeur une séquence d’actions, plutôt que l’objet sur lequel les actions sont exécutées.
Évitez d’utiliser le tuyau lorsque:
Vous devez manipuler plus d’un objet à la fois. Réservez des canalisations pour une séquence d’étapes appliquée à un objet principal.
Il existe des objets intermédiaires significatifs qui pourraient recevoir des noms informatifs.
Espaces blancs
%>% doit toujours avoir un espace devant lui et doit généralement être suivi d’une nouvelle ligne.
Après la première étape, chaque ligne doit être indentée de deux espaces.
Cette structure facilite l’ajout de nouvelles étapes (ou réorganise les étapes existantes) et plus difficile d’ignorer une étape.
Espaces blancs exemple
# Good iris %>% group_by(Species) %>% summarize_if(is.numeric, mean) %>% ungroup() %>% gather(measure, value, -Species) %>% arrange(value)
Bad
iris %>% group_by(Species) %>% summarize_all(mean) %>%
ungroup %>% gather(measure, value, -Species) %>%
arrange(value)
Longues lignes
Si les arguments d’une fonction ne tiennent pas tous sur une seule ligne, placez chaque argument sur sa propre ligne et indentez:
iris %>% group_by(Species) %>% summarise( Sepal.Length = mean(Sepal.Length), Sepal.Width = mean(Sepal.Width), Species = n_distinct(Species) )
Tuyaux courts
Un tube en une seule étape peut rester sur une seule ligne, mais à moins que vous ne prévoyiez de le développer ultérieurement, vous devriez envisager de le réécrire en un appel de fonction normal.
# Good iris %>% arrange(Species)
iris %>%
arrange(Species)
arrange(iris, Species)
Tuyaux courts 1
Parfois, il est utile d’inclure un tube court comme argument d’une fonction dans un tube plus long. Examinez attentivement si le code est plus lisible avec un tube en ligne court (qui ne nécessite pas de recherche ailleurs) ou s’il vaut mieux déplacer le code en dehors du tube et lui donner un nom évocateur.
# Good x %>% select(a, b, w) %>% left_join(y %>% select(a, b, v), by = c("a", "b"))
# Better x_join % select(a, b, w) y_join % select(a, b, v) left_join(x_join, y_join, by = c("a", "b"))
Aucun argument
magrittr vous permet d’omettre ()les fonctions qui n’ont pas d’arguments. Évitez cette fonctionnalité.
Good
x %>%
unique() %>%
sort()
Bad
x %>%
unique %>%
sort
Cession
Il existe trois formes d’affectation acceptables:
Nom de variable et affectation sur des lignes séparées:
iris_long %
gather(measure, value, -Species) %>%
arrange(-value)
Nom de variable et affectation sur la même ligne:
iris_long %
gather(measure, value, -Species) %>%
arrange(-value)
Affectation en bout de canalisation avec ->:
iris %>%
gather(measure, value, -Species) %>%
arrange(-value) ->
iris_long
cessation2
Je pense que c’est le plus naturel à écrire, mais cela rend la lecture un peu plus difficile: lorsque le nom vient en premier, il peut servir d’en-tête pour vous rappeler le but de la pipe.
Le package magrittr fournit l’ %<>%opérateur comme raccourci pour modifier un objet en place. Évitez cet opérateur.
Good
x %
abs() %>%
sort()
Bad
x %<>%
abs() %>%
sort()