如果我做:
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::n
dplyr 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()
会映射到某个东西并返回组大小.
我认为这是由于 plyr 和 dplyr 之间的掩蔽导致的。无论如何这解决了它:
dplyr::summarise(count = n())
Run Code Online (Sandbox Code Playgroud)