Dplyr: sélectionner des variables avec `commence_avec`,` se termine avec`, `contient` et` correspond` renvoie un mauvais résultat lorsque le modèle donné n'existe pas

Créé le 15 juil. 2014  ·  3Commentaires  ·  Source: tidyverse/dplyr

Voici le comportement:

> d <- tbl_df(data.frame(xxx = 1:2, yyy = 1:2, bxx = 1:2, bbb = 1:2))
> d %>% select(starts_with('nonsense'))
Source: local data frame [2 x 4]

  xxx yyy bxx bbb
1   1   1   1   1
2   2   2   2   2
> d %>% select(ends_with('nonsense'))
Source: local data frame [2 x 4]

  xxx yyy bxx bbb
1   1   1   1   1
2   2   2   2   2
> d %>% select(matches('nonsense'))
Source: local data frame [2 x 4]

  xxx yyy bxx bbb
1   1   1   1   1
2   2   2   2   2
> d %>% select(contains('nonsense'))
Source: local data frame [2 x 4]

  xxx yyy bxx bbb
1   1   1   1   1
2   2   2   2   2

Il est clair que la fonction de sélection ne doit pas renvoyer toutes les colonnes de la trame de données. Il doit soit générer une erreur avec un message utile, soit renvoyer une trame de données vide. Je ne sais pas ce qui serait préférable.

D'après ce que je peux voir, le problème se trouve dans la liste des fonctions appelées select_funs dans la fonction select_vars_q . Il faudrait saisir l'erreur là-dedans et décider quoi renvoyer en conséquence. Je serais heureux de soumettre une demande d'extraction, mais je ne veux pas vraiment travailler sans entendre ce que vous pensez que la valeur de retour la plus appropriée serait :)

bug

Commentaire le plus utile

Je ne sais pas s'il s'agit d'un problème connexe, mais ce qui suit me semble incohérent:

> data_frame(a=1, ba=1) %>%  select(starts_with("a"), ends_with("b")) %>% names
character(0)
> 
> data_frame(a=1, ab=1) %>%  select(starts_with("a"), ends_with("b")) %>% names
[1] "a"  "ab"

Tous les 3 commentaires

Je pense que cela devrait générer une erreur, quelque chose comme "Impossible de sélectionner des colonnes". Il doit également gérer le cas comme select(mtcars, -(mpg:carb)) .

Frais. J'enverrai une pull request dans environ une semaine. En vacances au guichet automatique.

Je ne sais pas s'il s'agit d'un problème connexe, mais ce qui suit me semble incohérent:

> data_frame(a=1, ba=1) %>%  select(starts_with("a"), ends_with("b")) %>% names
character(0)
> 
> data_frame(a=1, ab=1) %>%  select(starts_with("a"), ends_with("b")) %>% names
[1] "a"  "ab"
Cette page vous a été utile?
0 / 5 - 0 notes