8

tidyverse在包中使用选择功能时,我开始收到警告。

例子:

library(dplyr)
set.seed(123)
df = data.frame(
  "id" = c(rep("G1", 3), rep("G2", 4), rep("G3", 3)),
  "total" = sample.int(n = 10),
  "C1" = sample.int(n=10),
  "C2" = sample.int(n=10),
  "C3" = sample.int(n=10))
cols.to.sum = c("C1", "C2")
df.selected = df %>% 
  dplyr::select(total, cols.to.sum)

给予:

Note: Using an external vector in selections is ambiguous.
i Use `all_of(cols.to.sum)` instead of `cols.to.sum` to silence this message.
i See <https://tidyselect.r-lib.org/reference/faq-external-vector.html>.
This message is displayed once per session.

如果我重构为:

df.selected = df %>% 
  dplyr::select(total, all_of(cols.to.sum))

此行为已从 更改tidyselect_0.2.5tidyselect_1.0.0。直到现在还没有任何警告。

在有关此更改的文档(https://tidyselect.r-lib.org/reference/faq-external-vector.html)中,声明这只是一个警告,但将来会变成错误。

我的问题是如何处理现有代码的此类更改。

我是否应该重构使用此选择方法的每一行代码来添加all_of()外部矢量引用?当以这种方式进行选择的代码中可能有数百个片段时,这听起来很难完成(它也会影响其他功能 summarise_at,例如)。

唯一的选择是坚持tidyselect_0.2.5让运行代码继续工作吗?

在现有代码的包中进行这样的更改的方法是什么?

谢谢

4

1 回答 1

1

如果应该是您的第一个问题中的有效短语,那么它可能只是确保您的变量都没有被命名的问题cols.to.sum。只要是这种情况, using 的属性all_of()就不会与您的用例相关,您可以select照常使用。

如果您不想坚持使用旧版本tidyselect抑制库可能会有所帮助

于 2021-05-26T19:19:36.873 回答