R से C ++ (अंततः Rcpp के साथ) का अनुवाद करें [बंद]


10

मैं Rcpp का उपयोग करना सीखना चाहूंगा । मैं पैकेज के CRAN वेबसाइट पर डॉक्स के माध्यम से गया था, लेकिन मुझे लगता है कि एक व्यावहारिक उदाहरण पर काम करना (दूसरा व्यावहारिक, convolve3 पर विचार करना) अधिक सहायक होगा।

मैं स्ट्रोंगबेस पैकेज से निम्नलिखित कोड का प्रस्ताव करता हूं क्योंकि यह न तो बहुत लंबा है और न ही बहुत छोटा है, आर प्रकार और आर कार्यों के संयोजन का उपयोग करता है और उन छोटे अंकगणित पुनरावृत्तियों में से एक है जो आर में बहुत धीमी गति से हैं। आप आरसीपी पर कैसे जाएंगे -नहीं?

scaleTau2<-function (x, c1 = 4.5, c2 = 3, consistency = TRUE, mu.too = FALSE){
n <- length(x)
medx <- median(x)
x. <- abs(x - medx)
sigma0 <- median(x.)
mu <- if (c1 > 0) {
    x. <- x./(sigma0 * c1)
    w <- 1 - x. * x.
    w <- ((abs(w) + w)/2)^2
    sum(x * w)/sum(w)
}
else medx
x <- (x - mu)/sigma0
rho <- x^2
rho[rho > c2^2] <- c2^2
if (!identical(consistency, FALSE)) {
    Erho <- function(b) 2*((1-b^2)*pnorm(b)-b*dnorm(b)+b^2)-1
    Es2 <- function(c2) Erho(c2*qnorm(3/4))
    nEs2 <-ifelse(consistency == "finiteSample",n-2,n)*Es2(c2)
}
else nEs2 <- n
c(if (mu.too) mu, sigma0 * sqrt(sum(rho)/nEs2))
}

कृपया जितना हो सके समझाएं।

संपादित करें यह वास्तव में एक कुशल कार्यान्वयन के लिए एक अच्छी तरह से लिखे गए (और प्रलेखित) आर कोड (इसलिए कम से कम नींव ठीक हैं) को बदलने के बारे में आप कैसे जाना चाहते हैं, इसके बारे में कदम की व्याख्या का विचार है। कोड का चुनाव थोड़ा यादृच्छिक है, लेकिन मुझे लगता है कि यह हमारे ब्लूप्रिंट पर कट्टर-विशिष्ट स्क्रिप्ट को दर्शाता है (आर फ़ंक्शन जिन्हें कोई अनुवाद नहीं करना चाहता है, अंकगणितीय छोरों का उपयोग करता है ....)।

EDIT2 टिप्पणियों से मुझे एहसास हुआ कि यह वास्तव में C ++ में करने के लिए एक बड़ा काम हो सकता है (मुझे कोड पोस्ट करते समय इसका एहसास नहीं हुआ)। इस संबंध में, शैक्षणिक उपकरणों के रूप में अलग-अलग टुकड़ों का उपयोग करना ठीक है। मैं अंततः प्रश्न को संपादित करके टुकड़ों को एक साथ पार्स करूंगा।


3
मैं आपके संपादित शीर्षक और जोड़े गए / संपादित प्रश्न से बहुत असहमत हूं । यदि आप Rcpp को एक कोड कंपाइलर मानते हैं, या जब आपसे हमारे लिए कोड दोबारा लिखने को कहते हैं, तो आप गलती से हो जाते हैं।
डिर्क एडल्डबुलेटेल

@Dirk:> निश्चित रूप से, एक सुझाया शीर्षक क्या होगा (पुराना वाला?)। मैं वास्तव में इस विशेष समारोह के बारे में परवाह नहीं करता हूं, मैं अपने कोड को तेजी से चलाने के लिए सीखने के तरीकों में दिलचस्पी रखता हूं। यदि आपके पास एक और उदाहरण है, तो कृपया इसे पोस्ट करें। मैं खुशी से इसे बंद कर दूंगा।
user603

जवाबों:


13

दिलचस्प सवाल है, लेकिन काफी चुनौतीपूर्ण भी संक्षेप में चर्चा की जा करने के लिए:

  • आपको C ++ - साइड कार्यान्वयन की आवश्यकता होगी median()

  • पैकेज रोबस्टबेस से उद्धृत कोड अत्यधिक 'आर-अनुकूलित' है जो सबसे अच्छा शुरुआती बिंदु नहीं हो सकता है।

  • Rcpp एक 'R कंपाइलर' नहीं है जिसे आप 'इसे तेज बनाने' के लिए ऐसे किसी भी फंक्शन को टॉस करते हैं। यह मौजूदा C ++ कोड को जोड़ने या नए C ++ कोड लिखने के बारे में अधिक है।

  • बेशक उपरोक्त अनुवाद किया जा सकता है (ट्यूरिंग-तुल्यता और वह सब) लेकिन आरसीपीपी का उपयोग करने के बारे में जानने का यह सबसे अच्छा तरीका नहीं हो सकता है । मुझे लगता है कि मेलिंग सूची पर हमारे पास सरल उदाहरण हैं।

अंत में, क्या यह एसओ के लिए एक प्रोग्रामिंग सवाल नहीं है? ;-)


@Dirk:> ए) मंझले खेल के लिए मंझला () (पैकेज pcaPP में 'पुल' कहते हैं) के कार्यान्वयन के बहुत सारे हैं। बी) आप का मतलब है कि किसी को चलने के समय में एक बड़ा वृद्धि नहीं दिखाई देगी? ग) ठीक है, लेकिन मुझे लगता है कि इस कोड के साथ मुद्दा वास्तव में सी ++ के लिए अनुवाद नहीं है, बल्कि कुछ आर फ़ंक्शन [pnorm, dnorm, ...] को C ++ में कॉल करने का विचार है (बेशक मैं वास्तव में गलत हो सकता है) d) क्या आप अपनी मेलिंग सूची का लिंक प्रदान कर सकते हैं?
उपयोगकर्ता 603

क्या हम एक-एक करके उप-प्रश्नों को विभाजित कर सकते हैं? ए) आप सुविधा के लिए सी ++ से आर फ़ंक्शन को कॉल कर सकते हैं, लेकिन जरूरी नहीं कि गति। उदाहरण देखें / Rcpp में। B) मैंने कहा कि ऐसी कोई बात नहीं है। C) यह Rcpp 0.8.7 के बाद से सभी आसान है, 'Rcpp चीनी' डॉक्स, Rcpp-devel पर पोस्ट और हमारी हाल की प्रस्तुतियों को देखें। डी) यह आर-फोर्ज पेज से लटका हुआ है; 'rcpp-devel' के लिए बस Google।
डिर्क एडल्डबुलेटेल

1
1) dirk.eddelbuettel.com/pretations.html पर शुरू करें और अपने तरीके से काम करें। 2) उदाहरण के लिए छह उपनिर्देशिकाएं हैं / इसलिए मैं अनिश्चित हूं कि आप एक पर ध्यान केंद्रित क्यों करते हैं। 3) 770+ यूनिट टेस्ट हैं जो उदाहरण के रूप में दोगुने हैं यदि आप बारीकी से देखने के लिए परवाह करते हैं। 4) Rcpp पैकेज में आठ (8) vignettes हैं। 5) हमने Rcpp का उपयोग करने वाले कुछ अन्य पैकेज लिखे, आप उन पर भी नज़र डाल सकते हैं। 6) अंत में, CRAN Rcpp के आधार पर पंद्रह पैकेज सूचीबद्ध करता है - ये सभी उदाहरण भी हैं।
डिर्क एडल्डबुलेटेल

1
दोस्त: जिस प्रोजेक्ट में आप रुचि रखते हैं, उसके लिए एक मेलिंग सूची है। हमारे सभी दस्तावेज मेलिंग सूची पर पूछने का सुझाव देते हैं। तो क्यों ओह-क्यों तुम यहाँ पर जमा रहते हो? हम कर सकते हैं कृपया अब है कि बंद। अन्त में, आपके 'अति सतही' को कुछ समर्थन की आवश्यकता होगी। मैं ख़ुशी से पैच की समीक्षा करूँगा, बस उन्हें यहाँ पोस्ट न करें । ठीक है?
डिर्क एडल्डबुलेटेल

2
@kwak: "यह कुछ ऐसा है जो समुदाय के लिए आउटसोर्स होना चाहिए" का जवाब देना: मैं आपके योगदान को देखने के लिए तत्पर हूं क्योंकि आप इन उदाहरणों के माध्यम से खुद काम करते हैं।
जोशुआ उलरिच
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.