为什么我应该使用 `all_of` 来选择列?

s16*_*210 5 r dataframe tidyverse tibble

我目前正在使用 R 并all_of在 tidyverse 中遇到了该函数。这个函数存在的意义是什么?似乎我可以x在每个可以使用的地方all_of(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)
Run Code Online (Sandbox Code Playgroud)

all_of没有额外函数的两行产生相同的返回值。我为什么要费心使用它们?

小智 11

这是一个非常好的问题!

就是在选择栏目的时候要明确自己真正想要的是什么。想象一下这个简单的情况:

library(tidyverse)

tb <- tibble(x = 1:3, y = 1:3, z = 1:3)
x <- c("x", "y")

tb %>% select(x)
Run Code Online (Sandbox Code Playgroud)

你看到了吗?目前尚不清楚您是否想要x在此处作为外部向量并因此选择两列(xy),或者是否只想选择一列x

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

更多信息可以在tidyselect 文档中找到。