هذا هو السلوك:
> 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_funs
في الوظيفة select_vars_q
. سيتعين على المرء أن يكتشف الخطأ هناك ويقرر ما سيعود وفقًا لذلك. يسعدني تقديم طلب سحب ولكن لا أرغب حقًا في القيام بعمل دون سماع ما تعتقد أن القيمة المرتجعة الأنسب ستكون :)
أعتقد أنه يجب أن يظهر خطأ ، شيء مثل "فشل تحديد أي أعمدة". يحتاج أيضًا إلى التعامل مع الحالة مثل select(mtcars, -(mpg:carb))
.
رائع. سأرسل طلب سحب خلال أسبوع أو نحو ذلك. في عطلة الصراف الآلي.
لست متأكدًا مما إذا كانت هذه مشكلة ذات صلة ، لكن ما يلي يبدو غير متسق بالنسبة لي:
> 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"
التعليق الأكثر فائدة
لست متأكدًا مما إذا كانت هذه مشكلة ذات صلة ، لكن ما يلي يبدو غير متسق بالنسبة لي: