dplyr :: n()返回"错误:不应该直接调用此函数"

Sil*_*law 14 r dplyr

如果我做:

dplyr::mutate(MeanValue = mean(RSSI), ReadCount = n())
Run Code Online (Sandbox Code Playgroud)

一切正常.但是当我尝试限定功能时:

dplyr::mutate(MeanValue = mean(RSSI), ReadCount = dplyr::n())
Run Code Online (Sandbox Code Playgroud)

我收到标题中提到的错误.

所以,我真的没有问题,我可以避免这样做,但我很好奇它为什么会发生.我已经看过另一个问题(dplyr:"n()中的错误:函数不应该直接调用"),但据我所知,dplyr是我正在使用的唯一库.无论如何我试着做了答案,但是

detach(package:plyr)
Run Code Online (Sandbox Code Playgroud)

结果是

分离错误(package:plyr):无效的'name'参数和

conflicts()
Run Code Online (Sandbox Code Playgroud)

没有提到n():

[1]"过滤器""滞后""主体< - ""相交""kronecker""setdiff""setequal""union"
,其中大部分是由dplyr引起的.

我想我不是唯一一个对此感到困惑的人?

TJ *_*ahr 16

所以,我真的没有问题,我可以避免[写作dplyr::n()],但我很好奇它为什么会发生.

这是dplyr::ndplyr 0.5.0 的源代码:

function () {
    stop("This function should not be called directly")
}
Run Code Online (Sandbox Code Playgroud)

这就是完全限定的表单引发此错误的原因:函数始终返回错误.(我的猜测是dplyr::n存在错误抛出函数,因此n()可能有一个带有示例的典型文档页面.)

filter/ mutate/ summarise语句内部,n()不调用此函数.相反,某些内部函数会计算表达式的组大小n().这就是为什么在未加载dplyr时以下工作原理:

n()
#> Error: could not find function "n"

library(magrittr)
iris %>% 
  dplyr::group_by(Species) %>% 
  dplyr::summarise(n = n())
#> # A tibble: 3 × 2
#>      Species     n
#>       <fctr> <int>
#> 1     setosa    50
#> 2 versicolor    50
#> 3  virginica    50
Run Code Online (Sandbox Code Playgroud)

这里n()不能映射到一个函数,所以我们得到一个错误.但是当在dplyr动词中使用它时,n()会映射到某个东西并返回组大小.

  • 好的,我仍然不理解这种设计,但是它仍然是一个答案。;) (2认同)

Niv*_*hen 5

我认为这是由于 plyr 和 dplyr 之间的掩蔽导致的。无论如何这解决了它:

dplyr::summarise(count = n())
Run Code Online (Sandbox Code Playgroud)