错误:“across”不是从“namespace:collapse”导出的对象

kx5bkwkv  于 2023-02-27  发布在  其他
关注(0)|答案(1)|浏览(164)

我正在学习如何使用R包collapse来处理数据。collapse中的语法与dplyr相似,函数名称也相似。下面是一个示例。两个代码块都工作得很好。但是由于两个包都包含函数across。我想知道第二个代码块是否实际上使用了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))

fsummarise(.,跨(. fns = fmean))折叠::中的错误:
表达式需要被命名或以across()或其简写acr()开始。
结果collapse::across导致一个错误,显示across不在collapse包中。

collapse::across

错误:"across"不是从"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))

fsummarise(.,折叠:::交叉(. fns = fmean))中的错误:
表达式需要被命名或以across()或其简写acr()开始。
我想知道为什么collapse::across不能导出函数,以及是否有替代方法来指定特定包中的函数。

e4yzc0pl

e4yzc0pl1#

collapse 中,across()是一个内部函数,只能在fsummarise()fmutate()中使用。它可以缩写为acr()。它在fsummarisefmutate之外没有任何用处,因此不需要导出(这避免了与 dplyr 的名称空间冲突,并且我必须创建facross()或类似的东西)。
由于fsummarise()fmutate()延迟计算表达式,它们将检测到across()正在被传递,并将始终使用 collapse 版本。它们不支持dplyr::across(),也不打算解析类似collapse:::across()的内容,这是危险和冗余的。
因此,如果没有附加 collapse,则使用collapse::fsummarise(across(...))就足够了。

相关问题