2012-05-21 11 views
6

मैं समानांतर पैकेज का इस्तेमाल करने के लिए नए कर रहा हूँ और उन्हें अपने काम से कुछ तेजी लाने के लिए एक बोली में की खोज शुरू कर दिया है clusterExport लिए वस्तुओं। एक झुंझलाहट मैं अक्सर सामना foreach आदेश जब मैं प्रासंगिक कार्य/चर नहीं clusterExport है समस्याओं को फेंक नहीं है।यह जानते हुए कि क्या पहले से

उदाहरण

मुझे पता है कि उदाहरण नीचे जरूरी foreach की जरूरत नहीं है यह तेजी से बनाने के लिए, लेकिन उदाहरण के लिए, मैं इसे इस्तेमाल करेंगे।

library(doParallel) 
library(parallel) 
library(lubridate) 
library(foreach) 

cl <- makeCluster(c("localhost", "localhost", "localhost","localhost"), type = "SOCK") 
registerDoParallel(cl, cores = 4) 

Dates <- sample(c(dates = format(seq(ISOdate(2010,1,1), by='day', length=365), format='%d-%m-%Y')), 500, replace = TRUE) 

foreach(i = seq_along(Dates), .combine = rbind) %dopar% dmy(Dates[i]) 

Error in dmy(Dates[i]) : task 1 failed - "could not find function "dmy"" 

जैसा कि आप देख सकते हैं, वहाँ एक त्रुटि का कहना है कि कि dmy समारोह नहीं पाया जाता है। मैं तो पर जाने के लिए और निम्नलिखित जोड़ने के लिए:

clusterExport(cl, c("dmy")) 

तो मेरे सवाल है, क्या निर्यात करने पर सुराग के लिए त्रुटि को देख के अलावा, यह जानने का एक और अधिक सुरुचिपूर्ण तरीका पहले से क्या निर्यात करने के लिए वस्तुओं या है foreach चलाने से पहले सभी दासों के साथ वैश्विक पर्यावरण को साझा करने का कोई तरीका है?

+0

कि के लिए एक '.packages' तर्क नहीं है। –

+0

क्या आप विस्तार से बात करेंगे? मैंने कोशिश की (.packages()) और यह संलग्न संकुल सूचीबद्ध है। लेकिन मैं पैकेज की सभी वस्तुओं को कैसे निर्यात करूं? मैंने क्लस्टरएक्सपोर्ट (सीएल, सी ("लाइब्रेरी (लुब्रिडेट)") और क्लस्टरएक्सपोर्ट (सीएल, सी ("लुब्रिडेट") का कोई फायदा नहीं हुआ – JackeJR

+0

क्षमा करें, मेरा मतलब था 'फॉरेच' के लिए 'packages' तर्क,' ' पैकेज 'समारोह। –

उत्तर

2

मैन्युअल ऐसा व्यक्ति पैकेज कार्यों निर्यात करने के लिए कोई ज़रूरत नहीं। आवश्यक पैकेज लोड करने के लिए आप .packages तर्क foreach फ़ंक्शन का उपयोग कर सकते हैं, इसलिए सभी पैकेज फ़ंक्शंस आपके %dopar% अभिव्यक्ति के लिए उपलब्ध होंगे।

+1

क्या यह 2.14.0 में नई समानांतर लाइब्रेरी के लिए काम करता है, उदा। parLapply? मुझे एक समान समस्या है। –

+2

@ mindless.panda: आप प्रत्येक क्लस्टर नोड पर संकुल लोड करने के लिए 'clusterEvalQ (सीएल, पुस्तकालय (PackageName))' उपयोग करने के लिए सक्षम होना चाहिए। –

+0

धन्यवाद, मैं भी सिर्फ एक 'पुस्तकालय (PackageName) रखा' parLapply में गुमनाम समारोह के भीतर। –

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