Dplyr: 「starts_with」、「ends_with」、「contains」、「matches」で変数を選択すると、指定されたパターンが存在しない場合に間違った結果が返されます

作成日 2014年07月15日  ·  3コメント  ·  ソース: tidyverse/dplyr

動作は次のとおりです。

> 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

明らかに、select関数はデータフレーム内のすべての列を返す必要はありません。 役立つメッセージとともにエラーをスローするか、空のデータフレームを返す必要があります。 どちらが望ましいかわかりません。

私が見ることができることから、問題はselect_vars_q関数のselect_funsと呼ばれる関数のリストにあります。 そこでエラーをキャッチし、それに応じて何を返すかを決定する必要があります。 プルリクエストを送信できれば幸いですが、最も適切な戻り値が何であるかを聞かずに仕事をしたくはありません:)

bug

最も参考になるコメント

これが関連する問題であるかどうかはわかりませんが、次の点で一貫性がないようです。

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

全てのコメント3件

「列の選択に失敗しました」などのエラーがスローされるはずだと思います。 また、 select(mtcars, -(mpg:carb))ようなケースを処理する必要があります。

涼しい。 プルリクエストは1週間ほどで送信します。 休日のATMで。

これが関連する問題であるかどうかはわかりませんが、次の点で一貫性がないようです。

> 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"
このページは役に立ちましたか?
0 / 5 - 0 評価