2016-12-30 11 views
6

मैं उत्सुक हूं कि dplyr से n फ़ंक्शन प्रोग्राम किया गया है। जब dplyr env में n का मूल्यांकन, सभी मैं यह है:dplyr :: n फ़ंक्शन कैसे काम करता है?

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

शायद यह एक मूर्खतापूर्ण सवाल है, जहां यह परिभाषित किया जाता है लेकिन,? कुछ अन्य कार्यों के अंदर बुलाए जाने पर यह कैसे काम करता है? किस env में यह छुपा है?

आपकी मदद के लिए धन्यवाद

+1

अच्छा सवाल। [वास्तविक एन() फ़ंक्शन] (https://github.com/hadley/dplyr/blob/6153e136fa9397e88478fa6270d9d1f02eb5153e/R/manip.r#L337-L339) ढूंढना आसान है, लेकिन यह समझा नहीं जाता है कि क्यों 'n() 'म्यूटेट ',' फ़िल्टर' और 'सारांश' में काम करता है। क्या यह सी कोड में हो सकता है? –

+4

हो सकता है [यह] (http://stackoverflow.com/questions/39305474/dplyrn-returns-error-this-function-should-not-be-called- प्रत्यक्ष रूप से) – akrun

उत्तर

5

जहां तक ​​मैं समझता हूँ, dplyr संकर मूल्यांकन का उपयोग करता है। इसका मतलब है कि यह सी ++ में अभिव्यक्ति के कुछ हिस्सों का मूल्यांकन करेगा और आर n() में अन्य कार्यों में से एक है जो हमेशा सी ++ द्वारा संभाला जाता है। यह कारण है कि समारोह सीधे R में कुछ भी नहीं है, एक त्रुटि लौटने के अलावा के बाद से समारोह आर

प्रासंगिक C++ कोड द्वारा मूल्यांकन नहीं किया जाता on github पाया जा सकता है।

+0

अच्छा मदद करता है! दिलचस्प कार्य ... असल में यह शिक्षित है कि हैडली (या जो भी) ने इस समारोह को आर में त्रुटि के साथ लिखा था, अन्यथा मैं इसे नहीं सीखा होता! –

संबंधित मुद्दे