2011-12-03 17 views
12

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

विशेष रूप से:

  1. है आर में साजिश रचने की गति प्रोसेसर, स्मृति, ग्राफिक्स कार्ड के द्वारा ही सीमित?
  2. क्या कोई विशेष हार्डवेयर घटक या कॉन्फ़िगरेशन प्लॉटिंग गति में वृद्धि करेगा?

अद्यतन: टिप्पणी में प्रश्नों के उत्तर:

चश्मा: उबंटू 11.04, इंटेल कोर की जोड़ी, 8GB राम, लेकिन मैं सीमित कर रहा है और आम तौर पर चित्रमय गणना या चित्रमय प्रतिपादन मौसम में दिलचस्पी है , और यदि हां, तो मैं इस जानकारी का उपयोग कैसे कर सकता हूं।

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

+0

क्या आपने समांतर प्रसंस्करण में देखा है? या आप मुख्य रूप से कंप्यूटर-गहन एकल भूखंडों के बारे में रुचि रखते हैं? –

+0

@Xu नहीं, मैंने प्लॉट्स के लिए इसके बारे में सोचा नहीं था, और मुझे अक्सर कई भूखंडों में दिलचस्पी है। –

+0

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

उत्तर

9

जब तक आपके पास कंप्यूटर-गहन एकल प्लॉट न हो, तब तक कई प्लॉटिंग को गति देने का एक शानदार तरीका समांतर प्रसंस्करण के साथ होता है। उदाहरण के लिए, मान लें कि आपके पास डेटाफ्रेम है और आप इसे एक निश्चित चर (या चर) द्वारा तोड़ना चाहते हैं और प्रत्येक विभाजन के लिए प्लॉट करना चाहते हैं।

समांतर बैकएंड पंजीकृत करने के कई तरीके हैं इसलिए मैं इसमें नहीं जाऊंगा। उदाहरण के लिए देखें,, इस शब्दचित्र: http://cran.r-project.org/web/packages/doSMP/vignettes/gettingstartedSMP.pdf

तो हेडली के plyr पैकेज में समारोह ddply की जाँच और .parallel = TRUE विकल्प का उपयोग करें। यह मूल रूप से यह है। फिर सामान्य रूप से साजिश करना।

#this is the particular library I chose to register a parallel backend. There are others. See the new "Parallel R" book for details. 
library(doMC) 
registerDoMC() 
getDoParWorkers() #This lists how many workers you have (hopefully more than 1!) 

library(ggplot2) 
ddply(
     mtcars, .variables = "vs", .fun = function(x) { 
     #do your plotting now 
     example_plot <- ggplot(x, aes(y = mpg, x = wt)) + geom_point() + geom_smooth(se = FALSE) 
     #save your plot 
     ggsave(paste(x$vs[1],".pdf",sep = ""), example_plot) 
     }, 
     .parallel = TRUE 
) 

यह दो फ़ाइलें, 0.pdf और 1.pdf, जो स्तरों (यानी अनन्य मानों) कर रहे हैं mtcars dataframe की vs चर के बचत होगी:

यहाँ एक आत्म निहित उदाहरण है । यदि आपने इसे एक चर country name द्वारा तोड़ दिया है तो सहेजी गई फाइलें देश के नाम होंगी। 0.pdf और 1.pdf रूप में नीचे हैं:

enter image description here

enter image description here

+2

अच्छा उदाहरण है, लेकिन निष्पक्ष होने के लिए कभी-कभी ggplot (2) के बजाय जाली का उपयोग करने में मदद करता है। यह बहुत तेज हो सकता है। –

4

@Xu वांग बताते हैं के रूप में, आप एक बार में कई भूखंडों आकर्षित करने के लिए साथ में चलाना उपयोग कर सकते हैं।

तो हार्डवेयर के अनुसार, बहुत शक्तिशाली रैम वाले शक्तिशाली शक्तिशाली बहु-कोर मशीन थोड़ा सा मदद करेंगे।

यदि आप एक्स-वाई प्लॉट (स्कैटर प्लॉट) में 1 मिलियन सर्कल के साथ एक प्लॉट प्लॉट करना चाहते हैं, तो ग्राफिक्स हार्डवेयर त्वरण बहुत फायदेमंद होगा।

लेकिन एक तेज़ ग्राफिक्स कार्ड केवल तभी मदद करता है जब आर में ग्राफिक्स डिवाइस हार्डवेयर त्वरण का समर्थन करते हैं। वर्तमान में वे नहीं करते हैं - और @ हैडली बताते हैं, ggplot मानक ग्राफिक्स डिवाइस का उपयोग करता है।

rgl पैकेज स्पष्ट रूप से 3 डी ग्राफिक्स करने के लिए ओपनजीएल का उपयोग करता है। हालांकि कोशिश नहीं की है। आप कुछ प्लॉट्स को अधिक कुशलता से आकर्षित करने के लिए इसका उपयोग कर सकते हैं ...

मुझे कुछ इंटरैक्टिव हार्डवेयर त्वरित प्लेट्स (2 डी और 3 डी) बनाने का अनुभव है, और यह तेजी से बढ़ सकता है। 2 डी प्लॉट्स वास्तव में 3 डी की तुलना में तेज़ी से बढ़ने के लिए कठिन हैं ... शायद आर की वर्तमान ग्राफिक्स डिवाइस अवधारणा में प्लग करने के लिए एक आसान बात नहीं है।

अद्यतन मैंने अभी rgl और plot3d को 1 मिलियन अंक के साथ आजमाया। यह मेरे (बल्कि शक्तिशाली) लैपटॉप पर पूरी तरह से इंटरैक्टिव (अद्यतन करने के लिए एक सेकंड के छोटे अंश) है।

library(rgl) 
x <- sort(rnorm(1e6)) 
y <- rnorm(1e6) 
z <- rnorm(1e6) + atan2(x,y) 
plot3d(x, y, z, col=rainbow(1000)) 
+2

आरजी ग्राफिक्स डिवाइस – hadley

+0

@ हैडली - अच्छा बिंदु! अद्यतन उत्तर – Tommy

+0

अच्छा जवाब सभी। यहां एक अच्छा आरजीएल उदाहरण भी है http://stackoverflow.com/a/6814180/636656 –

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