r - 错误: 'across' is not an exported object from 'namespace:collapse'

标签 r dplyr r-package r-collapse

我正在学习如何使用R包collapse来处理数据。 collapse 中的语法与 dplyr 类似,具有相似的函数名称。下面是一个例子。两个代码块都运行良好。但由于这两个包都包含函数cross。我想知道第二个代码块是否实际上使用了 dplyr 中的 across 函数。

library(dplyr)
library(collapse)

# Group by cyl, then calculate mean for each columns using dplyr
mtcars %>%
  group_by(cyl) %>%
  summarise(across(.fns = mean)) 
# # A tibble: 3 × 11
# cyl   mpg  disp    hp  drat    wt  qsec    vs    am  gear  carb
# <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
# 1     4  26.7  105.  82.6  4.07  2.29  19.1 0.909 0.727  4.09  1.55
# 2     6  19.7  183. 122.   3.59  3.12  18.0 0.571 0.429  3.86  3.43
# 3     8  15.1  353. 209.   3.23  4.00  16.8 0     0.143  3.29  3.5 

# Group by cyl, then calculate mean for each columns using collapse
mtcars %>%
  fgroup_by(cyl) %>%
  fsummarise(across(.fns = fmean)) 
# cyl      mpg     disp        hp     drat       wt     qsec        vs        am     gear     carb
# 1   4 26.66364 105.1364  82.63636 4.070909 2.285727 19.13727 0.9090909 0.7272727 4.090909 1.545455
# 2   6 19.74286 183.3143 122.28571 3.585714 3.117143 17.97714 0.5714286 0.4285714 3.857143 3.428571
# 3   8 15.10000 353.1000 209.21429 3.229286 3.999214 16.77214 0.0000000 0.1428571 3.285714 3.500000

然后,我尝试了以下代码,指定了 collapse 包中的 across 函数,但它导致了错误。

mtcars %>%
  fgroup_by(cyl) %>%
  fsummarise(collapse::across(.fns = fmean)) 

Error in fsummarise(., collapse::across(.fns = fmean)) :
expressions need to be named or start with across(), or its shorthand acr().

事实证明,collapse::across 会导致错误,表明across 不在collapse 包中。

collapse::across

Error: 'across' is not an exported object from 'namespace:collapse'

collapse:::across 显示的功能如下。

function (.cols = NULL, .fns, ..., .names = NULL, .apply = "auto", 
    .transpose = "auto") 
{
    stop("across() can only work inside fmutate() and fsummarise()")
}
<bytecode: 0x0000018a76156648>
<environment: namespace:collapse>

但是以下仍然失败。

mtcars %>%
  fgroup_by(cyl) %>%
  fsummarise(collapse:::across(.fns = fmean)) 

Error in fsummarise(., collapse:::across(.fns = fmean)) :
expressions need to be named or start with across(), or its shorthand acr().

我想知道为什么 collapse::across 无法导出该函数,以及是否有其他方法可以在特定包中指定函数。

最佳答案

崩溃中,across()是一个内部函数,仅在 fsummarise() 内部使用和fmutate() 。可以缩写为 acr() 。它在 fsummarise 之外没有任何用处和fmutate ,因此不需要导出(这避免了与 dplyr 的命名空间冲突,而我必须创建 facross() 或类似的东西)。

fsummarise()fmutate()延迟计算表达式,它们会检测到 across()正在通过,并且将始终使用折叠版本。他们不支持dplyr::across()并且也不打算解析类似 collapse:::across() 的内容,这是危险且多余的。

因此,如果未附加折叠,请使用 collapse::fsummarise(across(...))就足够了。

关于r - 错误: 'across' is not an exported object from 'namespace:collapse' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75065285/

相关文章:

r - 检查对象是否存在于指定路径的多级列表中

r - R 的日志包推荐

r - 在 R 数据框中按组应用计算

r - 在 R 中,选择向量时 [[X]] 和 [, X] 有什么区别

r - 在日期序列中查找月份的最后一天

r - Mutate() 基于在另一列中找到的不同长度的字符串向量的新列

r - 强制 R 包版本依赖的上限

r - 使用 R 从现有列创建新列

r - 考虑到因子频率,如何通过客户 ID 聚合数据帧?

r - ggplot2轴通过常数转换