为啥我应该使用 `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 作为外部向量并因此选择两列(xy),或者您是否只想选择一列x

这就是为什么你应该使用all_of(),它表示你想从外部向量中选择列名。

更多信息可以在tidyselect docs找到。

【讨论】:

所以all_of 很有用,当我想选择存储在名称也是列的变量中的列时。我应该始终使用它作为良好的标准吗? 没错!当提到外部向量时,是的,您可能应该将其用作一个好的标准。我认为 not using 它会向控制台打印一条警告消息。

以上是关于为啥我应该使用 `all_of` 来选择列?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我应该使用 JWT 而不是简单的散列令牌

Pandas:为啥在布尔索引后需要双括号来选择列

为啥我应该在 AngularJS 中选择使用服务而不是工厂? [复制]

为啥我在 Azkaban 中的 Sqoop 任务在选择列后卡住了?

为啥我应该使用单独的测试目标来运行 XCTests,我应该怎么做?

我应该使用复合主键来加速 PostgreSQL 中基于时间戳的选择吗?