【问题标题】:Why is one_of() called that?为什么 one_of() 被称为?
【发布时间】:2018-02-02 14:07:37
【问题描述】:

为什么叫dplyr::one_of()?所有其他 select_helpers 名称对我来说都有意义,所以我想知道 one_of() 是否有我不理解的方面。

我对@9​​87654324@ 的理解是,它只允许您使用其名称的字符向量来选择变量,而不是将其名称放入select() 调用中,但随后您将获得名称在向量中的所有变量,而不仅仅是其中一个。是不是错了,如果是对的,one_of() 这个名字是从哪里来的?

【问题讨论】:

  • 我认为唯一能回答这个问题的人是dplyr 的开发人员。尝试发送电子邮件至maintainer("dplyr")
  • +1。好问题。正在寻找 one_of 将字符向量传递给 recipes 包中的函数只是为了忽略/忽略它,因为名称表明它只返回一个......可能更直观地调用 one_of 类似的东西from_names...
  • 似乎将其命名为is_one_of() 会更好,以匹配starts_with()contains()matches() 等的谓词样式命名。

标签: r naming tidyverse


【解决方案1】:

one_of 允许猜测或子集匹配

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

mtcars %>% select(one_of(c("mpg","cyl","garbage")))

评估但提供消息

Warning message:
Unknown variables: `garbage`

对比

mtcars %>% select(mpg, cyl, garbage)

不评估并给出错误

Error in overscope_eval_next(overscope, expr) : 
  object 'garbage' not found    

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我认为你成功了。 tidyverse 包经常使用基本 R 函数名称的同义词,one_of 应该被认为是 %in% 的同义词,我们检查每个 colname 是否是给定选项的“之一”,那么一切都有意义。虽然仍然不是这个名字的粉丝:)。
    【解决方案3】:

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

    例如:

    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()变量会被显示出来:)

    【讨论】:

      猜你喜欢
      • 2010-10-12
      • 1970-01-01
      • 1970-01-01
      • 2017-03-28
      • 2014-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-27
      相关资源
      最近更新 更多