2017-08-27 50 views
0

我遇到以下问题。我需要的变量timeindex在我的全球环境,但是当我想从我的全球环境的并行处理时将其导出为我的集群中,我得到了以下信息:如何在foreach循环中运行clusterExport(操作系统:Windows)

错误{:任务1失败 - “对象 'SZENARIO' 未找到”

我的原代码,这会产生错误小例子:

Historical <- structure(c(18.5501872568473, 24.3295787432955, 14.9342384460288, 
    13.0653757599636, 8.67294618896797, 13.4587662721594, 20.792126254714, 
    17.5162747884424, 28.8253151239752, 23.0568765432192), index = structure(c(-7305, 
    -7304, -7303, -7302, -7301, -7300, -7299, -7298, -7297, -7296 
    ), class = "Date"), class = "zoo") 

    Szenario <- structure(c(10.2800684124652, 14.5495871489361, 9.8565852930294, 
    21.1654540678686, 21.1936990312861, 12.4209005842752, 9.77473132000267, 
    17.1997402736739, 17.884107611858, 13.622588360244), index = structure(c(13149, 
    13150, 13151, 13152, 13153, 13154, 13155, 13156, 13157, 13158 
    ), class = "Date"), class = "zoo") 

    library(doParallel) 
    library(foreach)  
    library(raster) 
    library(zoo) 
    library(parallel) 

    # Parallelisation Settings 
    # Definition of how many cores you want to use 
    UseCores <- detectCores() -2 # -1 at max because one core has to be used for other tasks 
    # Register CoreCluster 
    cl <- makeCluster(UseCores) 
    registerDoParallel(cl) 

foreach(fn=1:1) %dopar% { 

    library(raster) # needed libraries have to be loaded inside the loop, while parallel processing occurs 
    library(zoo) 
    library(base) 
    library(parallel) 

    #In my original script, I'm looping through Filenames, which are called like my variables in my Global environment (without .tif at the end of the filename), variables names are saved as characters 
    file.referenz.name <- c("Historical") 
    file.szenario.name <- c("Szenario") 

    #Create timeindex für rasterstacks to subset later on with them (getZ, setZ) 

    clusterExport(cl, varlist = c(file.szenario.name, file.referenz.name), envir = .GlobalEnv) 
    time.index.szenario <- index(get(file.szenario.name)) 
    time.index.referenz <- index(get(file.referenz.name)) 

} 

#end cluster 
stopCluster(cl) 

回答

1

试试这个

foreach(fn=1:1, .export=c("Szenario"), 
       .packages=c("raster", "zoo", "base", "parallel") %dopar% 

它在%dopar% {}clusterExport混淆。您可以clusterExport每个clforeach之前,或者干脆用.exportforeach

您可以删除在%dopar% {}library语句。

+0

谢谢。我可以从我的全球环境中导出所有变量吗? .export = environment()' – Nucore

+1

好吧,它的'.export = ls(.GlobalEnv)' – Nucore

+1

要小心导出* everything *,因为导出不需要导出的很多和/或大的对象将会添加大量的开销。相反,尝试仔细确定所需的全局变量集合,例如通过试验和错误。或者,您可以使用doFuture后端,参见https://stackoverflow.com/a/45898676/1072091 – HenrikB

相关问题