dplyr::n()返回;错误:不应直接调用此函数;
如果我这样做:dplyr::n()返回;错误:不应直接调用此函数;,r,dplyr,R,Dplyr,如果我这样做: dplyr::mutate(MeanValue = mean(RSSI), ReadCount = n()) 一切正常。 但当我尝试限定函数时: dplyr::mutate(MeanValue = mean(RSSI), ReadCount = dplyr::n()) 我得到了标题中提到的错误 所以,我真的没有问题,我可以避免这样做,但我很好奇为什么会这样。我已经看了另一个问题(),但据我所知,dplyr是我正在使用的唯一库。不管怎样,我试着按照答案的建议去做,但是 deta
dplyr::mutate(MeanValue = mean(RSSI), ReadCount = n())
一切正常。
但当我尝试限定函数时:
dplyr::mutate(MeanValue = mean(RSSI), ReadCount = dplyr::n())
我得到了标题中提到的错误
所以,我真的没有问题,我可以避免这样做,但我很好奇为什么会这样。我已经看了另一个问题(),但据我所知,dplyr是我正在使用的唯一库。不管怎样,我试着按照答案的建议去做,但是
detach(package:plyr)
导致
分离中出错(包:plyr):无效的“name”参数
及
没有提到n():
[1] 过滤器“滞后”正文
所以,我并没有真正的问题,我可以避免[writingdplyr::n()
],但我很好奇为什么会发生这种情况
以下是dplyr 0.5.0中的dplyr::n
的源代码:
function () {
stop("This function should not be called directly")
}
这就是完全限定表单引发此错误的原因:该函数总是返回错误。(我猜抛出错误的函数dplyr::n
存在,因此n()
可能会有一个典型的文档页面,其中包含示例。)
在filter
/mutate
/summary
语句中,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()
#>错误:找不到函数“n”
图书馆(magrittr)
虹膜%>%
dplyr::按(物种)分组%>%
dplyr::摘要(n=n())
#>#A tibble:3×2
#>物种n
#>
#>1刚毛50
#>2彩色50
#>3弗吉尼亚州50
这里的
n()
无法映射到函数,因此我们得到了一个错误。但是当在dplyr谓词中使用它时,n()
确实映射到某个对象并返回组大小。我知道我迟到了2年,但我的看法是这样的
dplyr中的分组实际上对数据没有任何作用。它只是注意到它是分组的。这意味着像mean或n这样的函数需要意识到这一点,并且必须从更广泛的上下文中推断出它们应该按组执行计算。它们不是reallu R函数,它们不知道这一上下文。它们基本上是symSummary()或mutate()的BOL选择以某种方式进行计算(每组的平均值或计数)。我认为Hadley选择在直接调用n()时显示错误,因为这比根本没有实现函数要好一些。我认为这是plyr和dplyr之间屏蔽的结果。 无论如何,这解决了这个问题:
dplyr::summarise(count = n())
在新的会话中,
?n
中的示例对我很有用。n
在dplyr中似乎是一个内部函数,而dplyr::n
不能被同等对待,只能调用-error-giving-R函数。是的,最好不要把n
看作是一个R函数,而是一个summary
,mutate
,等等,传递给知道如何解释它的C函数。你加载了plyr我猜是的,我仍然不理解这个设计,但它仍然是一个答案。;)我如何应用这个?
dplyr::summarise(count = n())