2012-11-07 14 views
14

मैं आर के match.call फ़ंक्शन के स्रोत कोड को देखना चाहता हूं। चूंकि यह एक आंतरिक कार्य है, मैंने आर स्रोत कोड डाउनलोड किया, ./src/main/names.c पर गया और match.call पर देखा।यह पता लगाने के लिए कि कौन सी .c फ़ाइल में आर इंटर्नल्स के .c फ़ंक्शंस हैं, विंडोज़ पर?

इस प्रकार, मुझे पता चला कि इसी .c फ़ंक्शन को do_matchcall कहा जाता है। ठीक है, लेकिन मैं कैसे पता लगा सकता हूं कि .sscc/main/ में .c फ़ाइलों में से कौन से दर्जनों में do_matchcall फ़ंक्शन शामिल है?

बीटीडब्ल्यू मैं एक विंडोज मशीन का उपयोग कर रहा हूं, अगर इससे कोई फर्क पड़ता है।

+5

+1 कारणों से मैंने विंडोज़ को हटा दिया। '../ आर-2.15.2/src> grep do_matchcall */*' रिटर्न 'मुख्य/अद्वितीय.c' (दूसरों के बीच)। –

उत्तर

10

विंडोज उपयोगकर्ता के रूप में, यहां कुछ विकल्प दिए गए हैं। पहले एक बेहतर है, लेकिन दूसरा एक प्रासंगिक उपयोग हेतु ठीक है:

  • डाउनलोड grepwin, जो आप शक्तिशाली grep आदेश है कि दोनों यहोशू और गेविन उल्लेख किया है का उपयोग कर विंडोज निर्देशिका खोज करने के लिए अनुमति देगा। यह (या कुछ समकक्ष) अनिवार्य है यदि आप प्रोग्राम स्रोत निर्देशिकाओं में बहुत अधिक पोकिंग कर रहे हैं।

  • do_matchcall की परिभाषा के लिए आर स्रोत निर्देशिका खोजने के लिए this site पर खोज बार का उपयोग करें। नतीजे पर क्लिक करने पर यह आपको बताएगा कि do_matchcall "अद्वितीय परिभाषित फाइल के 3 9 3 पर" परिभाषित है ", और अद्वितीय.c में कोड को हाइपरलिंक प्रदान करेगा।

जैसा कि मैंने कहा, हालांकि, आप अंततः बहुत खुश हो जाएगा अगर आप grep के कुछ कार्यान्वयन के साथ अपने Windows बॉक्स से लैस।

+0

वाह, धन्यवाद, आपके द्वारा लिंक की गई साइट भयानक है। किसी ऐसे व्यक्ति के लिए बिल्कुल सही जो कभी-कभी एक एकल आर आंतरिक देखना चाहता है। –

+0

@ वुल्फगैंगपोस्नेकर - खुशी है कि मदद करता है। ध्यान रखें कि आर को अगली बार अपडेट होने पर लिंक तोड़ देगा। इसे काम करने के लिए, बस "आर-2.15.2" से http://fossies.org/dox/R-2.15.2/index.html के "संस्करण भाग" को संपादित करें जो वर्तमान संस्करण है। –

+0

@ वुल्फगैंगपोस्नेकर: [rseek.org पर 'do_matchcall' के लिए खोज] [http://www.rseek.org/?cx=010923144343702598753%3Aboaz1reyxd4&q=do_matchcall&newwindow=1&cof=FORID%3A11) एक और विकल्प है, और [rseek.org ] (http://www.rseek.org/) सामान्य रूप से आसान है। –

6

उवे लिगेज ने R News (2006, 6(4):43-45) में इस विषय पर "आर हेल्प डेस्क" लेख लिखा था।

एक बार जब आप वास्तविक सी फ़ंक्शन का उपयोग कर चुके हैं, तो प्रासंगिक स्रोत फ़ोल्डर में फ़ंक्शन नाम खोजने के लिए अपने फाइल सिस्टम खोज टूल का उपयोग करें; इस मामले में , उदा। लिनक्स

$ grep -r -H "do_matchcall" ./src/main/ 
./src/main/.svn/text-base/names.c.svn-base:{"match.call", do_matchcall, 0, 11, 3, {PP_FUNCALL, PREC_FN, 0}}, 
./src/main/.svn/text-base/unique.c.svn-base:SEXP attribute_hidden do_matchcall(SEXP call, SEXP op, SEXP args, SEXP env) 
./src/main/unique.c:SEXP attribute_hidden do_matchcall(SEXP call, SEXP op, SEXP args, SEXP env) 
./src/main/names.c:{"match.call", do_matchcall, 0, 11, 3, {PP_FUNCALL, PREC_FN, 0}}, 

पर यह दर्शाता है कि unique.c इस मामले में देखने के लिए जगह है।

मेरे सर्वोत्तम ज्ञान के लिए, आर के भीतर से पहचानने के लिए कोई तरीका नहीं है (टर्मिनल पर सिस्टम कॉल का आह्वान करने के अलावा) जिसमें स्रोत फ़ाइल में आर-कुएं में किसी दिए गए फ़ंक्शन के लिए सी कोड होता है, बिना पुनर्लेखन के grep या find या आर कोड का उपयोग करने के समान :-)

+0

मैं यूवे लिगेज के लेख की आपकी सिफारिश को दूसरी बार दूंगा। आर उपयोगकर्ताओं के लिए यह आवश्यक पठन है। –

+1

आपके सहायक उत्तर के लिए धन्यवाद। हालांकि, मैं पहले से ही संदर्भित लेख जानता था।लेकिन रेखाएं "अगर फ़ाइल नाम स्पष्ट नहीं है, तो यह द्वारा आर '$ R_HOME/src/में स्ट्रिंग के लिए बस' grep'ping 'पाया जा सकता है, जैसा कि मैंने कभी भी लिनक्स का उपयोग नहीं किया है। जोश ओ'ब्रायन का जवाब भी अप्रत्यक्ष रूप से दिखाता है कि 'grep'ing एक विंडोज उपयोगकर्ता के लिए' सरल 'या' प्राकृतिक 'नहीं है। –

+0

गैर-विंडोज उपयोगकर्ता के रूप में, मैं यह मान रहा था कि आप अपने ओएस पर फ़ाइलों में स्ट्रिंग की खोज कैसे करेंगे। वास्तव में यह आपका प्रश्न है और यदि आप इसे एक प्रश्न के रूप में लिखते हैं (लेकिन इस पर नहीं] क्योंकि यह प्रोग्रामिंग समस्या नहीं है - सुपरयूसर ठीक हो सकता है) [टैग: आर] टैग पर निर्देशित करने के बजाय आपको बेहतर मदद मिल सकती है लोग। –

8

मुझे पता है कि यह बहुत समय पहले पूछा गया है, लेकिन चूंकि यह अभी भी प्रासंगिक है, मैंने सोचा कि मैं कुछ संसाधन जोड़ दूंगा जो लोग उचित आर स्रोत फ़ाइलों को खोजने के लिए उपयोग कर सकते हैं।

  1. पहले, pryr साथ आप का उपयोग show_c_source समारोह जो GitHub पर सी स्रोत फ़ाइलों में कोड के प्रासंगिक टुकड़ा खोज करेंगे कर सकते हैं।

    body(match.call) 
    
    # .Internal(match.call(definition, call, expand.dots)) 
    
    pryr::show_c_source(.Internal(match.call(definition, call, expand.dots))) 
    

    जो तुम this page पर ले जाता है, दिखा रहा है कि unique.c समारोह do_matchcall शामिल हैं।

  2. मैं एक साथ इस tab delimited file रख दिया है, names.c फ़ाइल पर निर्माण और का उपयोग कर में फ़ाइलों स्रोत कोड के स्थान का निर्धारण करने के लिए। ऐसे कुछ फ़ंक्शन हैं जिनमें प्लेटफ़ॉर्म-विशिष्ट फ़ाइलें हैं, और कुछ अन्य हैं जिनके लिए प्रासंगिक स्रोत कोड के साथ एक से अधिक फ़ाइल हैं। लेकिन बाकी के लिए मैपिंग कम से कम वर्तमान संस्करण (3.1.2) के लिए बहुत अच्छी तरह से स्थापित है।

+1

उपर्युक्त उत्तर में टैब सीमित फ़ाइल आश्चर्यजनक रूप से सहायक है! साझा करने के लिए धन्यवाद। – dpritch

0

एक बार फ़ाइल सामग्री खोज के लिए उपयोगिता डाउनलोड न करें। आप findstr का उपयोग कर सकते हैं। यह एक पूर्ण फ़ाइल सिस्टम खोज के लिए उपयुक्त नहीं है, लेकिन मुझे लगता है कि आप जो करने की कोशिश कर रहे हैं उसके लिए यह सही है।

  1. आदेश खोल चलाने

cmd

  1. निर्देशिका के लिए जाना (यदि आपको पता क्या मार्ग है नहीं कर रहे हैं, में मिल पता बार में क्लिक करके पूरा पथ देखने के लिए एक्सप्लोरर) आप उस निर्देशिका को कॉपी/पेस्ट कर सकते हैं।
    पथ सी है: \ jsmith \ दस्तावेज \ परियोजनाओं \ \ Users खुश \ src \ मुख्य

cd C: \ Users \ jsmith \ दस्तावेज \ परियोजनाओं \ खुश \ src \ मुख्य

  • findstr उपयोग findstr do_matchcall

    अगर आप उप खोज करना चाहते हैं निर्देशिका

    findstr/एस do_matchcall

    अगर केवल फ़ाइल नाम जानना चाहता हूँ

    findstr/मी do_matchcall

    यदि आप किसी अन्य फाइल

    लिए परिणाम भेजना चाहते हैं findstr/s/m do__matchcall> searchresult.txt

    यदि आप लाइन नंबर चाहते

    findstr/एन do_matchcall

    findstr भी नियमित अभिव्यक्ति का समर्थन करता है। सभी विकल्पों को देखने के लिए

    findstr /?

  • +0

    यह शायद आपके विशिष्ट प्रश्न पर लागू नहीं होता है, लेकिन केस-असंवेदनशील खोज उपयोग के लिए/i findstr/i do_matchcall –

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