为什么one_of()会调用它?

Mis*_*caE 26 naming r tidyverse

为什么dplyr::one_of()叫那个?所有其他select_helpers名字对我来说都是有道理的,所以我想知道是否有一个one_of()我不理解的方面.

我的理解one_of()是它只是让你使用它们的名字的字符向量来选择变量,而不是将它们的名字放入select()调用中,但是你得到名字在向量中的所有变量,而不仅仅是其中一个.这是错的,如果它是正确的,名称one_of()来自哪里?

CPa*_*Pak 24

one_of 允许猜测或子集匹配

假设我一般都知道我的列名将来自c("mpg","cyl","garbage")但我不知道由于交互性/反应性将出现哪些列

mtcars %>% select(one_of(c("mpg","cyl","garbage")))
Run Code Online (Sandbox Code Playgroud)

评估但提供消息

Warning message:
Unknown variables: `garbage`
Run Code Online (Sandbox Code Playgroud)

相反

mtcars %>% select(mpg, cyl, garbage)
Run Code Online (Sandbox Code Playgroud)

不评估并给出错误

Error in overscope_eval_next(overscope, expr) : 
  object 'garbage' not found    
Run Code Online (Sandbox Code Playgroud)


Sho*_*rpy 20

我想到的方式是select()最终评估逻辑向量.因此,如果您使用starts_with它,则会遍历数据框中的变量,并询问变量名称是否以正确的字符集开头.one_of做同样的事情,但询问变量名是否是字符向量中列出的名称之一.但正如他们所说,命名事情很难!

  • 我想你把它钉了。“ tidyverse”包通常使用基R函数名称的同义词,“ one_of”应被视为“%in%”的同义词,我们检查每个同名是否为给定选项的“一个”,然后一切感。仍然不喜欢这个名字:)。 (2认同)

小智 5

其名称的原因似乎是它允许您至少查找向量中包含的变量之一。

例如:

select(flights, dep, arr_delay, sched_dep_time)不起作用,因为变量“dep”不存在。它不会产生任何结果。

select(flights, one_of(c("dep", "arr_delay", "sched_dep_time")))即使变量“dep”不存在,也会起作用。在这种情况下,将显示“arr_delay”和“sched_dep_time”。

助手应该被理解为:至少one_of()会显示变量:)