2017-02-17 7 views
12

मुझे फ़ोरैच पैकेज में एक सुविधा/बग मिला है, जिसे मैं समझ नहीं पा रहा हूं। शायद कोई मुझे इस व्यवहार को समझा सकता है:foreach पैकेज में सूचियों का ढांचा

मैंने foreach पैकेज के साथ एक फॉर-लूप बनाया है (मैं उन्हें मल्टीकोरोर गणनाओं के साथ एक साथ उपयोग करता हूं, लेकिन यहां केवल अनुक्रमिक उदाहरण में, बग दोनों प्रकारों में दिखाई देता है)। यह पाश r बार चलाता है। प्रत्येक रन में c प्रविष्टियों के साथ एक सूची लौटा दी जाती है। इसलिए मुझे r प्रविष्टियों वाली एक सूची की उम्मीद है, और प्रत्येक प्रविष्टि में c सूचियां शामिल हैं।

मेरे कोड के बाद एक था:

library(foreach) 

clusters <- 10 
runs <- 100 

temp <- foreach(r = 1:runs, 
       .combine = 'list', 
       .multicombine = TRUE) %do% { 

       signal_all <- lapply(1:clusters, function(x){ 

       return(1) 

       }) 

       return(signal_all) 
      } ## end do 
इस कोड के साथ

, सभी काम करता है के रूप में उम्मीद, निम्न चित्र देखें:

enter image description here

लेकिन जब runs <- 101 में वृद्धि, उत्पादन temp है यह:

enter image description here

अपेक्षित सूची संरचना नष्ट हो गई है। लेकिन जब .combine = 'list' लाइन पर टिप्पणी करते समय सभी काम अपेक्षित होते हैं।

library(foreach) 

clusters <- 10 
runs <- 100 

temp <- foreach(r = 1:runs, 
       .multicombine = TRUE) %do% { 

       signal_all <- lapply(1:clusters, function(x){ 

       return(1) 

       }) 

       return(signal_all) 
      } ## end do 

enter image description here

कोई इस व्यवहार की व्याख्या कर सकते हैं? किसी भी मदद के लिए धन्यवाद!

उत्तर

4

इस बीच मुझे एक समाधान मिला है।

फ़ोरैच फ़ंक्शन जानता है कि कुछ कॉमिन-फ़ंक्शन (उदा। c या cbind) कई तर्क लेते हैं, और प्रदर्शन को बेहतर बनाने के लिए उन्हें 100 तर्क (डिफ़ॉल्ट रूप से) के साथ कॉल करेंगे। तर्क .maxcombine के साथ आप उन्हें मैन्युअल रूप से सेट कर सकते हैं।

library(foreach) 

clusters <- 10 
runs <- 101 

temp <- foreach(r = 1:runs, 
       .combine = 'list', 
       .maxcombine = runs, 
       .multicombine = T) %do% { 

       signal_all <- lapply(1:clusters, function(x){ 

       return(1) 

       }) 

       return(signal_all) 
      } ## end do 
संबंधित मुद्दे