2017-08-24 3 views
2

Pourquoi le dplyr::one_of() est-il appelé? Tous les autres noms ont un sens, donc je me demande s'il y a un aspect de one_of() que je ne comprends pas. Ma compréhension de one_of() est qu'il vous permet simplement de sélectionner des variables en utilisant un vecteur de caractères de leurs noms au lieu de mettre leurs noms dans l'appel select(), mais alors vous obtenez toutes les variables dont les noms sont dans le vecteur, pas seulement l'un des eux. Est-ce que c'est faux, et si c'est correct, d'où vient le nom one_of()?Pourquoi one_of() s'appelle-t-il?

+4

Je pense que les seules personnes qui peuvent répondre à ce sont les développeurs de 'dplyr'. Essayez d'envoyer un e-mail 'maintainer (" dplyr ")'. –

Répondre

5

La façon dont je pense à ce sujet est que select() évalue finalement à un vecteur logique. Donc, si vous utilisez starts_with, il passe en revue les variables de la base de données et demande si le nom de la variable commence par le bon ensemble de caractères. one_of fait la même chose mais demande si le nom de la variable est l'un des noms répertoriés dans le vecteur de caractères. Mais comme on dit, nommer les choses est difficile!

4

one_of permet de deviner ou sous-correspondant

Disons que je sais en général mes noms de colonnes viendront de c("mpg","cyl","garbage") mais je ne sais pas quelles colonnes seront présentes en raison de l'interactivité/réactivité

mtcars %>% select(one_of(c("mpg","cyl","garbage"))) 

mais fournit evalue un message

Warning message: 
Unknown variables: `garbage` 

En revanche

mtcars %>% select(mpg, cyl, garbage) 

n'évalue pas et donne l'erreur

Error in overscope_eval_next(overscope, expr) : 
    object 'garbage' not found