2012-04-13 18 views
9

कनवर्ट करना मैं एक आर स्क्रिप्ट को गति कारणों से सी-कोड में परिवर्तित करना चाहता हूं और इसे .exe के रूप में पैक करने की क्षमता के लिए परिवर्तित करना चाहता हूं। मैं सीआर कोड को सी कोड

पर नया हूं, मेरा प्रश्न यह है कि यह सी में काफी तेज होगा? रेट सीमित चरण एक प्रकार का एल्गोरिदम है जिसे बड़े वैक्टरों को कई बार लागू किया जाना है। मुझे यकीन नहीं है कि आर में वेक्टरिज्ड कार्यक्षमता इससे मदद करेगी या इसे धीमा कर देगी। मैंने यह भी पढ़ा है कि आर

यदि मुझे सी में ऐसा करना चाहिए, तो कौन सी लाइब्रेरी मुझे बुनियादी मैट्रिक्स मैनिपुलेशन जैसे आर के कुछ डेटा प्रोसेसिंग कार्यों की नकल करने में मदद कर सकती है? मुझे कहां से शुरू करना चाहिए? अभी मुझे यह भी पता नहीं है कि सी (कॉमा सीमांकित टेक्स्ट फ़ाइल) में अपना डेटा कैसे पढ़ा जाए।

+1

आप किस प्रकार की गति-प्राप्त करने की उम्मीद करते हैं? आपको लगता है कि आर इन परिचालनों के लिए सी से काफी धीमी होगी? क्या आपने http://stackoverflow.com/questions/1330944/speed-of-r-programming- भाषा का अध्ययन किया है? –

+0

विशेष रूप से, 'पंक्तिसमूह' और 'कोलसम' पहले से ही बहुत तेज़ हैं - आप शायद वहां बड़ी संख्या में प्रदर्शन को निचोड़ने में सक्षम नहीं होंगे (और आपको 'मैट्रिक्स' में काफी समृद्ध स्पैस-मैट्रिक्स समर्थन पर विचार करना चाहिए पैकेज, यदि आपके matrices sparse हैं ...)। क्या आप "अन्य उपयोगकर्ताओं को चलाने की क्षमता" के बारे में थोड़ा और विशिष्ट हो सकते हैं? –

+1

यह बहुत काम होगा, esp। चूंकि आप सी प्रोग्रामिंग के साथ खरोंच से शुरू कर रहे हैं। आप आर [कोड स्थापित कर सकते हैं] (http://cran.r-project.org/bin/windows/rw-FAQ.html) उपयोगकर्ता मशीनों पर कम समय में आर कोड को कन्वर्ट करने के लिए ले जाएगा। – hardmath

उत्तर

10

मैं इस प्रश्न का उत्तर देने के साथ-साथ मैं कर सकता हूं।

... लेकिन जो सवाल आप नहीं पूछ रहे हैं वह शायद अधिक प्रासंगिक है: क्या आर एल्गोरिदम आर में तेजी से बनाया जा सकता है? यहां जवाब आमतौर पर "हां" होता है। क्या यह "पर्याप्त तेज़" हो सकता है? खैर, कोशिश किए बिना जवाब देना असंभव है (और वर्तमान आर कोड देख रहा है)।

प्रश्न: क्या मेरा आर एल्गोरिदम सी में तेज होगा?

ए: हाँ! यदि आप एल्गोरिदम के लिए "सर्वश्रेष्ठ" सी कोड लिखते हैं, तो यह अधिक तेज़ होगा। यह संभवतः बहुत अधिक ऐसा करने के लिए अधिक काम करेगा।

प्रश्न: क्या सी में बड़े वैक्टरों को क्रमबद्ध किया जा सकता है?

ए: हां। बहु थ्रेडिंग का उपयोग करके, आप गति को काफी सुधार सकते हैं। ... लेकिन आर में sort(x, method='quick') पर कॉल करके शुरू करें और देखें कि क्या चीजों में सुधार होता है! यादृच्छिक डेटा के लिए डिफ़ॉल्ट विधि बहुत तेज़ नहीं है।

x <- runif(1e7) 
system.time(sort(x))     # 2.50 secs 
system.time(sort(x, method='quick')) # 1.37 secs 
#system.time(tommysort(x))    # 0.51 secs (4 threads) 

प्रश्न: कौन सी पुस्तकालय बुनियादी आर कार्यों की नकल करते हैं?

ए: एलएपीएक्स/बीएलएएस आर में मैट्रिक्स गणित को संभालता है। यदि आपको इसकी आवश्यकता है, तो आप पुस्तकालयों को ढूंढ सकते हैं जो आर में वेनिला वाले लोगों की तुलना में बहुत तेज हैं (आप प्रदर्शन में सुधार के लिए आर में भी उनमें से कुछ का उपयोग कर सकते हैं!) ।

More info on BLAS

एक और तरीका है आर से सेल्सियस के लिए और वहाँ से आप आर की कार्यक्षमता के सभी के लिए उपयोग किया एक .Call बनाने के लिए है! inline पैकेज और Rcpp पैकेज इसे आसान बनाने में मदद कर सकता है।

आपके आवेदन में आर को एम्बेड करने का एक तीसरा तरीका है। Rinside इसे आसान बनाने में मदद कर सकता है।

प्रश्न: मैं सी में सीएसवी डेटा कैसे पढ़ूं?

ए: fopen और fscanf फ़ंक्शंस देखें। ... और डेटा आयात फ़ंक्शन लिखने के लिए उनका उपयोग करें।

+0

लक्ष्य प्लेटफ़ॉर्म Windows होना चाहिए (.exe का उल्लेख किया गया है), और शायद AMD64 (32-बिट पुराना हो रहा है, और लगभग कोई भी Itanium का मालिक नहीं है)। एक अच्छा बीएलए एएमएक्स का उपयोग एएमएक्स 64 में करेगा, जो नाटकीय रूप से कोड को तेज कर सकता है (विकल्प निश्चित रूप से एक लूप है)। और यहां तक ​​कि सी में, Dirk की टिप्पणी ऊपर लागू होती है: प्रोफ़ाइल, प्रोफाइल, प्रोफ़ाइल। विस्तृत प्रतिक्रिया के लिए –

+0

धन्यवाद! – JoshDG