2016-12-30 71 views
6

我很好奇如何从dplyr编程功能n。当dplyr ENV评估n,我得到的是这样的:dplyr :: n函数是如何工作的?

function() 
{ 
    stop("This function should not be called directly") 
} 
<environment: namespace:dplyr> 

也许这是一个愚蠢的问题,但是,它被定义在哪里?在一些其他功能中调用时它是如何工作的?它隐藏了哪些env?

感谢您的帮助

+1

好问题。 [实际的n()函数](https://github.com/hadley/dplyr/blob/6153e136fa9397e88478fa6270d9d1f02eb5153e/R/manip.r#L337-L339)很容易找到,但它不能解释为什么'n() '在mutate','filter'和'summarise'中工作。它可以在C代码中吗? –

+4

可能是[这](#)(http://stackoverflow.com/questions/39305474/dplyrn-returns-error-this-function-should-not-be-called-直接)帮助 – akrun

回答

5

据我了解,dplyr采用混合动力的评价。这意味着它将评估C++中的某些表达部分以及R中的其他部分。n()是一直由C++处理的函数之一。这就是为什么功能不R做任何直接,除了返回一个错误,因为该功能不会被R.

相关C++代码评估可以发现on github

+0

好!有趣的功能......实际上,hadley(或者谁)用R中的错误编写了这个函数是有教育意义的,否则我就不会知道了! –