हेडली
आप निश्चित रूप से C ++ कोड लिख सकते हैं जो C कोड के समान है।
मैं समझता हूं कि आप C ++ के बारे में सी से अधिक जटिल होने के बारे में क्या कहते हैं। यह है कि यदि आप हर चीज में महारत हासिल करना चाहते हैं: ऑब्जेक्ट, टेम्प्लेट, एसटीएल, टेम्प्लेट मेटा प्रोग्रामिंग, आदि ... ज्यादातर लोगों को इन चीजों की आवश्यकता नहीं है और बस दूसरों पर भरोसा कर सकते हैं यह करने के लिए। Rcpp का कार्यान्वयन बहुत जटिल है, लेकिन सिर्फ इसलिए कि आप नहीं जानते कि आपका फ्रिज कैसे काम करता है, इसका मतलब यह नहीं है कि आप दरवाजा नहीं खोल सकते हैं और ताजा दूध नहीं ले सकते हैं ...
R के लिए आपके कई योगदानों से, जो मुझे प्रभावित करता है वह यह है कि आप R को कुछ थकाऊ (डेटा हेरफेर, ग्राफिक्स, स्ट्रिंग मैनिपुलेटिव, आदि ...) पाते हैं। खैर आर के आंतरिक सी एपीआई के साथ और अधिक आश्चर्य के लिए तैयार हो जाओ। यह बहुत थकाऊ है।
समय-समय पर, मैं आर-एक्सटीएस या आर-इन्ट्स मैनुअल पढ़ता हूं। इससे मदद मिलती है। लेकिन ज्यादातर समय, जब मैं वास्तव में किसी चीज के बारे में पता लगाना चाहता हूं, तो मैं आर स्रोत में जाता हूं, और उदाहरण के लिए साइमन द्वारा लिखे गए पैकेजों के स्रोत में भी (वहां आमतौर पर सीखने के लिए बहुत कुछ है)।
Rcpp को एपीआई के इन थकाऊ पहलुओं को दूर करने के लिए डिज़ाइन किया गया है।
आप स्वयं के लिए न्याय कर सकते हैं कि आपको कुछ उदाहरणों के आधार पर और अधिक जटिल, अस्पष्ट, आदि क्या मिला ... यह फ़ंक्शन C API का उपयोग करके एक वर्ण वेक्टर बनाता है:
SEXP foobar(){
SEXP ab;
PROTECT(ab = allocVector(STRSXP, 2));
SET_STRING_ELT( ab, 0, mkChar("foo") );
SET_STRING_ELT( ab, 1, mkChar("bar") );
UNPROTECT(1);
}
Rcpp का उपयोग करते हुए, आप समान फ़ंक्शन लिख सकते हैं:
SEXP foobar(){
return Rcpp::CharacterVector::create( "foo", "bar" ) ;
}
या:
SEXP foobar(){
Rcpp::CharacterVector res(2) ;
res[0] = "foo" ;
res[1] = "bar" ;
return res ;
}
जैसा कि डिर्क ने कहा, कई विगनेट्स पर अन्य उदाहरण हैं। हम आमतौर पर लोगों को अपनी इकाई परीक्षणों की ओर भी इशारा करते हैं क्योंकि उनमें से प्रत्येक कोड के एक बहुत विशिष्ट हिस्से का परीक्षण करते हैं और कुछ हद तक आत्म व्याख्यात्मक हैं।
मैं स्पष्ट रूप से यहाँ पक्षपाती हूँ, लेकिन मैं R के C API को सीखने के बजाय Rcpp के बारे में परिचित होने की सलाह दूंगा, और यदि कुछ अस्पष्ट है या Rcpp के साथ उचित नहीं लगता है, तो मेलिंग सूची में आएं।
वैसे भी, बिक्री पिच का अंत।
मुझे लगता है कि यह सब निर्भर करता है कि आप आखिरकार किस तरह का कोड लिखना चाहते हैं।
रोमेन