2017-06-16 2 views
0

ich weiß nicht, ob dies etwas mit dem foreach zu tun hat, aber ich denke, mehr mit der Prognose ...Fehler bei der Ausführung von foreach mit Prognose

Unten ist nur ein kleines Beispiel für größeren Tisch, ich will um dieses Skript parallel auszuführen, da es einige Zeit benötigt. Ich erhalte die Fehlermeldung:

„Fehler in {: Aufgabe 2 fehlgeschlagen -‚ Argument ist die Länge Null‘

und ich weiß nicht, warum, wie die Prognose-Funktion funktioniert gut, wenn sie separat ausgeführt

# Test Data 
Data <- data.frame(Date = as.Date(c("2017-01-01", "2017-02-01", "2017-03-01", "2017-04-01", "2017-05-01", "2017-06-01")), 
       A = c(1,6,3,6,5,6), 
       B = c(6,5,6,3,6,1)) 
Data <- as.xts(Data[-1], Data[,1]) #convert to xts for the forecast package          

library(foreach) 
library(doSNOW) 
library(forecast) 
cl <- makeCluster(2, type="SOCK") # for 2 cores machine 
registerDoSNOW (cl) 

# forecast the values in each column and bind the result of the forecast together by column to get one data.frame 
Result <- foreach(j = 1:ncol(Data), .combine = "cbind", .packages = "forecast") %dopar% {forecast(Data[,j], h = 6L)$mean} 

stopCluster(cl) 


# Result how it should look like 
Result <- data.frame(A = c(4.7,4.7,4.7,4.7,4.7,4.7), 
        B = c(4.4,4.4,4.4,4.4,4.4,4.4)) 

Vielen Dank für Ihre Hilfe!

Antwort

2

der Fehler wird von dem xts Paket stammt nicht exportiert werden. die Umgebungen die [ Methode für Ihr xts Objekt Data zugreifen müssen.

Sie können dies beheben mit .packages = c("forecast","xts") (empfohlen) oder durch explizite Verwendung xts:::`[.xts` (nicht vorgeschlagen, aber enthalten für den Nachweis, warum Fehler auftritt).

Hinweis: die Ausgabe nicht mit dem in Ihrer Frage

library(foreach) 
library(doSNOW) 
library(forecast) 

# Test Data 
Data <- data.frame(Date = as.Date(c("2017-01-01", "2017-02-01", "2017-03-01", 
            "2017-04-01", "2017-05-01", "2017-06-01")), 
        A = c(1,6,3,6,5,6), 
        B = c(6,5,6,3,6,1)) 
Data <- xts::as.xts(Data[-1], Data[,1]) #convert to xts for the forecast package          

cl <- makeCluster(2, type="SOCK") # for 2 cores machine 
registerDoSNOW(cl) 

# forecast the values in each column and bind the result of the forecast together by column to get one data.frame 
Result_export <- foreach(j = 1:ncol(Data), .combine = "cbind", 
         .packages = c("forecast","xts")) %dopar% { 
          forecast(Data[,j], h = 6L)$mean 
          } 

Result_colon <- foreach(j = 1:ncol(Data), .combine = "cbind", 
         .packages = c("forecast")) %dopar% { 
          forecast(xts:::`[.xts`(Data,j=j), h = 6L)$mean 
         } 

identical(Result_export, Result_colon) 
# [1] TRUE 

as.data.frame(Result_export) 
# result.1 result.2 
# 1 4.499867 4.500107 
# 2 4.499867 4.500107 
# 3 4.499867 4.500107 
# 4 4.499867 4.500107 
# 5 4.499867 4.500107 
# 6 4.499867 4.500107 

stopCluster(cl) 
gepostet erwartete Ergebnis
+0

Thank you! Ich habe nicht darüber nachgedacht! – Sven

Verwandte Themen