dplyr包中找不到across函数

8

我想在dplyr中使用across()函数,但是出现了错误。例如,运行以下代码:

iris %>%
  group_by(Species) %>%
  summarise(across(starts_with("Sepal"), mean))

给我

Error in across(starts_with("Sepal"), mean) : 
  could not find function "across"

across()是最近在dplyr中引入的 https://towardsdatascience.com/what-you-need-to-know-about-the-new-dplyr-1-0-0-7eaaaf6d78ac 函数。但是,需要更新和加载dplyr包。

packageVersion('dplyr')
[1] ‘1.0.0’

检查 dplyr 内部

ls("package:dplyr")
  [1] "%>%"                   "add_count"             "add_count_"            "add_row"               "add_rownames"          "add_tally"            
  [7] "add_tally_"            "all_equal"             "all_vars"              "anti_join"             "any_vars"              "arrange"              
 [13] "arrange_"              "arrange_all"           "arrange_at"            "arrange_if"            "as_data_frame"         "as_label" 

我发现across不存在,但是如果我在帮助器中查找该函数?across,我会得到经典页面,解释across的功能。
如何让across工作?
----- 编辑 -----
我的sessionInfo()如下:
> sessionInfo()
R version 3.6.1 (2019-07-05)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS Mojave 10.14.6

Matrix products: default
BLAS:   /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.6/Resources/lib/libRlapack.dylib

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] tidyselect_1.1.0 dplyr_1.0.0     

loaded via a namespace (and not attached):
 [1] Rcpp_1.0.3       cellranger_1.1.0 pillar_1.4.2     compiler_3.6.1   forcats_0.4.0    tools_3.6.1      jsonlite_1.6     lubridate_1.7.4  lifecycle_0.2.0 
[10] tibble_2.1.3     nlme_3.1-140     gtable_0.3.0     lattice_0.20-38  pkgconfig_2.0.3  rlang_0.4.6      cli_1.1.0        rstudioapi_0.10  haven_2.1.1     
[19] xml2_1.2.2       httr_1.4.1       stringr_1.4.0    generics_0.0.2   vctrs_0.3.1      hms_0.5.1        grid_3.6.1       glue_1.4.1       R6_2.4.0        
[28] fansi_0.4.0      readxl_1.3.1     readr_1.3.1      modelr_0.1.5     tidyr_1.0.0      purrr_0.3.3      ggplot2_3.2.1    magrittr_1.5     backports_1.1.4 
[37] scales_1.0.0     rvest_0.3.4      assertthat_0.2.1 tidyverse_1.2.1  colorspace_1.4-1 utf8_1.1.4       stringi_1.4.3    lazyeval_0.2.2   munsell_0.5.0   
[46] broom_0.5.2      crayon_1.3.4    
> .libPaths()
[1] "/Library/Frameworks/R.framework/Versions/3.6/Resources/library"

如果您使用更明确的 dplyr::across 调用它,它是否有效? - rpolicastro
不,它没有。错误:'across'不是来自'namespace:dplyr'的导出对象 - Andrew
1
在加载dplyr包后,您的sessionInfo中是否列出了1.0.0版本?我想知道您是否在其他地方有另一个版本的dplyr导致了问题。也许还可以添加您的操作系统信息;我无法在Windows 7 R 4.0中重现该问题。 - aosmith
dplyr 1.0.0tidyselect_1.1.0一起显示在other attached packages:下。我正在Mac上运行此代码。我不知道如何让其他人重现此错误(代码来自across帮助页面)。 - Andrew
2
我在我的问题中附上了会话信息和.libPath()输出。 - Andrew
1
似乎在我的系统上运行正常(最近更新了 R 和所有程序包)。你有尝试先更新程序包和重新启动吗?然后也许升级到 R 4.0.1?可能不会解决问题,但值得一试。 - QAsena
1个回答

2

across函数仅在dplyr的开发版本中提供,尚未在CRAN上发布。要使用across函数,请使用以下代码安装dplyr dev版本。

install.packages("devtools")

library(devtools)
devtools::install_github("tidyverse/dplyr")
library(dplyr)

现在你的代码应该可以工作了。

data("iris")
iris %>%
  group_by(Species) %>%
  summarise(across(starts_with("Sepal"), mean))

输出

# A tibble: 3 x 3
  Species    Sepal.Length Sepal.Width
  <fct>             <dbl>       <dbl>
1 setosa             5.01        3.43
2 versicolor         5.94        2.77
3 virginica          6.59        2.97

自dplyr 1.0.0版本开始提供,详情请见https://www.tidyverse.org/blog/2020/04/dplyr-1-0-0-colwise/。 - zx8754

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接