为啥我应该使用 `all_of` 来选择列?
Posted
技术标签:
【中文标题】为啥我应该使用 `all_of` 来选择列?【英文标题】:Why should I use `all_of` to select columns?为什么我应该使用 `all_of` 来选择列? 【发布时间】:2020-10-05 09:34:30 【问题描述】:我目前正在使用 R,并在 tidyverse 中遇到了函数 all_of
。这个函数的存在是为了什么?似乎我可以在每个可以使用all_of(x)
的地方只使用x
..
示例:
图书馆(tidyverse)
tb <- tibble(a=1:3, b=1:3, c=1:3)
x <- c("a", "b")
tb %>% select(all_of(x))
tb %>% select(x)
tb %>$ select(-all_of(x))
tb %>% select(-x)
带有all_of
的两行与没有额外函数的行产生相同的返回值。我为什么要费心使用它们?
【问题讨论】:
【参考方案1】:这是一个非常好的问题!
这是为了在选择列时明确您真正想要的内容。想象一下这种简单的情况:
library(tidyverse)
tb <- tibble(x = 1:3, y = 1:3, z = 1:3)
x <- c("x", "y")
tb %>% select(x)
你看到了吗?目前尚不清楚您是否希望在此处将x
作为外部向量并因此选择两列(x
和y
),或者您是否只想选择一列x
。
这就是为什么你应该使用all_of()
,它表示你想从外部向量中选择列名。
更多信息可以在tidyselect docs找到。
【讨论】:
所以all_of
很有用,当我想选择存储在名称也是列的变量中的列时。我应该始终使用它作为良好的标准吗?
没错!当提到外部向量时,是的,您可能应该将其用作一个好的标准。我认为 not using 它会向控制台打印一条警告消息。以上是关于为啥我应该使用 `all_of` 来选择列?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我应该在 AngularJS 中选择使用服务而不是工厂? [复制]
为啥我在 Azkaban 中的 Sqoop 任务在选择列后卡住了?