matches()
将选择助手 ( , contains()
, starts_with()
, )管道(的值ends_with()
)到across()
函数的行为与将选择助手放在括号内的行为不同across()
。
- 为什么会这样?
- 这是预期的行为还是错误?
复制
library(dplyr)
# Very simple function: returns input
self = function(x){x}
# Data to manipulate
dtemp = tibble(var = 1:2)
# No note/warning/error when selection helper is inside across()
dtemp %>% mutate(across(matches("var"), self))
# Note/warning/error when selection helper is piped to across()
dtemp %>% mutate(matches("var") %>% across(self))
观察到的行为
最后一行导致 R 打印
Note: Using an external vector in selections is ambiguous.
i Use `all_of(.)` instead of `.` to silence this message.
i See <https://tidyselect.r-lib.org/reference/faq-external-vector.html>.
This message is displayed once per session.
请注意,此消息每个会话仅打印一次,因此您必须重新启动 R 才能再次看到它(除非有其他方法可以重置控制此打印的计数器)。
倒数第二个命令(带有matches()
inside across()
)不会导致 R 打印注释。
预期行为
最后两个命令的行为相同。
附加信息
- dplyr 版本:1.0.6
- tidyverse 版本:1.3.1
> sessionInfo()
R version 4.0.3 (2020-10-10)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 19042)
Matrix products: default
locale:
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] dplyr_1.0.6
loaded via a namespace (and not attached):
[1] fansi_0.5.0 assertthat_0.2.1 utf8_1.2.1 crayon_1.4.1
[5] R6_2.5.0 DBI_1.1.1 lifecycle_1.0.0 magrittr_2.0.1
[9] pillar_1.6.1 cli_2.5.0 rlang_0.4.11 rstudioapi_0.13
[13] vctrs_0.3.8 generics_0.1.0 ellipsis_0.3.2 tools_4.0.3
[17] glue_1.4.2 purrr_0.3.4 compiler_4.0.3 pkgconfig_2.0.3
[21] tidyselect_1.1.1 tibble_3.1.2