如果我这样做:
dplyr::mutate(MeanValue = mean(RSSI), ReadCount = n())
一切正常。
但是,当我尝试对该功能进行限定时:
dplyr::mutate(MeanValue = mean(RSSI), ReadCount = dplyr::n())
我收到了标题中提到的错误。
所以,我真的没有问题,我可以避免这样做,但我很好奇它为什么会发生。我已经看了另一个问题(dplyr: "Error in n(): function should not be called directly"),但据我所知,dplyr是我唯一使用的库。无论如何,我尝试做了答案,但是
detach(package:plyr)
结果
分离错误(包:plyr):无效'名称'争论 和
conflicts()
没有提到n():
[1]"过滤" "延迟" "&体LT; - " "交叉" "克罗内克" " setdiff" " setequal" "联合"
,其中大部分是由dplyr引起的。
我想我不是唯一一个对此感到困惑的人?
答案 0 :(得分:13)
所以,我真的没有问题,我可以避免[写
dplyr::n()
],但我很好奇它为什么会发生。
以下是dplyr 0.5.0中dplyr::n
的源代码:
function () {
stop("This function should not be called directly")
}
这就是完全限定的表单引发此错误的原因:函数始终返回错误。 (我的猜测是错误抛出函数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
此处n()
无法映射到函数,因此我们收到错误。但是当在dplyr动词中使用它时,n()
会映射到某个东西并返回组大小。
答案 1 :(得分:1)
我知道我迟到了2年,但这是我的看法。
dplyr中的分组实际上对数据没有任何作用。只是说明它已分组。这意味着均值或n之类的函数需要意识到这一点,并且必须从更广泛的上下文中推断出它们应该按组进行计算。它们不是reallu R函数,它们不了解此上下文。它们基本上是summarise()或mutate()选择以某种方式评估的符号(每组的均值或计数)。我认为如果您直接调用n(),Hadley选择显示错误,因为这比根本没有实现任何功能要好一些。
答案 2 :(得分:1)
我认为这是由于plyr和dplyr之间的掩盖而来的。 无论如何,它都能解决:
dplyr::summarise(count = n())