2016-12-30 13 views
6

Jestem ciekawy, jak programuje się funkcja n z dplyr. Przy ocenie n w dplyr env, wszystko mam to:Jak działa funkcja Dplyr :: n?

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

Może to głupie pytanie, ale gdzie jest zdefiniowane? Jak to działa, gdy jest wywoływany w innych funkcjach? W którym env jest ukryty?

Dzięki za pomoc

+1

Dobre pytanie. [Rzeczywista funkcja n()] (https://github.com/hadley/dplyr/blob/6153e136fa9397e88478fa6270d9d1f02eb5153e/R/manip.r#L337-L339) jest łatwa do znalezienia, ale nie wyjaśnia, dlaczego 'n() 'działa w' mutate', 'filter' i' summarise'. Czy może być w kodzie C? –

+4

Może być [to] (http://stackoverflow.com/questions/39305474/dplyrn-returns-error-this-function- would-not-be-called-directly) pomaga – akrun

Odpowiedz

5

O ile mi zrozumieć, dplyr wykorzystuje ocenę hybrydowy. Oznacza to, że oceni niektóre części wyrażenia w C++, a inne w R. n() jest jedną z funkcji, które zawsze są obsługiwane przez C++. To dlatego, że funkcja nie robi nic w R bezpośrednio, z wyjątkiem powrotu błąd, ponieważ funkcja nie jest oceniany przez R.

Odpowiedni kod C++ można znaleźć on github.

+0

fajnie! Ciekawa funkcja ... W rzeczywistości jest to wychowawcze, że hadley (lub ktokolwiek inny) napisał tę funkcję z błędem w R, inaczej bym się tego nie nauczył! –