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 :)
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"
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: