Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
dplyr::n()返回;错误:不应直接调用此函数;_R_Dplyr - Fatal编程技术网

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] 过滤器“滞后”正文 所以,我并没有真正的问题,我可以避免[writing
dplyr::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())