2013-02-11 12 views
6

का उपयोग करके डेटाफ्रेम पर पंक्तियों को जोड़ना मुझे समानांतर प्रोसेसिंग का उपयोग करके डेटा फ्रेम में मूल्य जोड़ने के साथ समस्या है।फ़ोरैच पैकेज

मेरे पास एक ऐसा फ़ंक्शन है जो कुछ गणना करेगा और डेटाफ्रेम वापस करेगा, इन गणनाओं सहित एक यादृच्छिक नमूनाकरण है।

मुझे ऐसा क्या किया है:

randomizex <- function(testdf) 
{ 
    foreach(ind=1:1000)%dopar% 
    { 
     testdf$X = sample(testdf$X,nrow(testdf), replace=FALSE) 
     fit = lm(X ~ Y, testdf) 
     newdf <- rbind(newdf, data.frame(pc=ind, err=sum(residuals(fit)^2))) 

    } 

return(newdf) 
} 
resdf = randomizex(mydf) 

जब मैं resdf का परिणाम देखने, यह खाली

है अगर मैं %do% साथ %dopar% की जगह परिणाम सही ढंग से गणना की जाती है, लेकिन यह बहुत धीमी है ..

वैसे भी इसे बढ़ावा देने के लिए वैसे भी है ??

+1

हमें याद दिलाता है कि 'foreach' और' dopar' कहां से आया है। और आपका 'mydf' भी - ताकि हम आपकी समस्या का पुनरुत्पादन कर सकें। – Spacedman

+0

mydf सिर्फ एक यादृच्छिक डेटाफ्रेम है, और foreach एक पैकेज है और आपको 'लाइब्रेरी (foreach) 'और' लाइब्रेरी (डीएमसी) ',' रजिस्टर डीओएमसी() ' – ifreak

उत्तर

11

मुझे लगता है कि आपको foreach के लिए दस्तावेज़ों को पढ़ने की आवश्यकता है। आपके कोड ब्लॉक को एक ही भाग की गणना करनी चाहिए, तो आपको .combine विकल्प का उपयोग यह कहने के लिए करना चाहिए कि उन सभी में एक साथ कैसे जुड़ें। अधिक मार्गदर्शन के लिए help(foreach) में उदाहरण देखें। यह for पाश के लिए सीधे प्रतिस्थापन नहीं है।

उदाहरण के लिए:

> resultdf = foreach(i=1:10,.combine=rbind)%dopar%{data.frame(x=runif(4),i=i)} 
> resultdf 
      x i 
1 0.23794248 1 
2 0.15536320 1 
3 0.58609635 1 
4 0.98780497 1 
5 0.97806482 2 
6 0.92440741 2 
7 0.13416121 2 
8 0.81598340 2 
9 0.13834423 3 
[etc] 
+0

ठीक जोड़ना चाहिए, आपके उत्तर के लिए धन्यवाद, लेकिन मैं कैसे वापस आ सकता हूं परिणामस्वरूप डीएफ और इसे कहीं और इस्तेमाल करें ?? यह सिर्फ stdou पर मुद्रित किया जा रहा है .. – ifreak

+0

इसका मूल्य 'foreach' द्वारा लौटाया गया - संपादन देखें – Spacedman

3

आप इस तरह के रूप में अपने 'foreach पाश' संशोधित करने की आवश्यकता:

newdf = foreach(ind=1:1000, .combine=rbind) %dopar% 
{ 
    testdf$X = sample(testdf$X,nrow(testdf), replace=FALSE) 
    fit = lm(X ~ Y, testdf) 
    data.frame(pc=ind, err=sum(residuals(fit)^2)) 
} 

आशा है कि यह मदद करता है!

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