【问题标题】:R: doSNOW/foreach create list of listR: doSNOW/foreach 创建列表列表
【发布时间】:2019-01-02 12:23:15
【问题描述】:

您好,我想使用 doSNOW/foreach 包创建一个命名列表。例如,最终产品将是一个列表对象。从向量命名的 dfe 说,

n=c("n1","n2","n3","n4","n5")

这样我就可以访问列表对象的列表,例如dfe[["n1"]]$a,其中 a 是列表中的一个元素。

这是我所说的一个例子。

mainStart <- Sys.time()

n=c("n1","n2","n3","n4","n5")

cores=detectCores() 
cl <- parallel::makeCluster(cores[1]-1) #not to overload your computer
registerDoSNOW(cl)

## setup progress bar 
pb <- txtProgressBar(max = 5, style = 3)
progress <- function(n) setTxtProgressBar(pb, n)
opts <- list(progress = progress)


dfe <-  foreach(id.this = n, .combine = list, .options.snow = opts) %dopar% {
    list ( a=c(1,2,3), b = c(1,2,3))
}

endTime <- Sys.time()
endTime -mainStart 


close(pb)
stopCluster(cl)

因此,如果我在 foreach 循环中创建的列表可以是循环后的名称和访问权限,那就太好了。这样 dfe[["n1"]]$a 可以给我向量 1,2,3。

【问题讨论】:

  • 不要合并,之后使用 setNames(dfe, n)。
  • @F.Privé 令人惊讶的是它可以正常工作,因为我认为它会出现故障。例如,当我这样做时,if ( id.this == "n2"){Sys.sleep(10)} 订单被保留,谢谢。

标签: r parallel-processing doparallel snow


【解决方案1】:

正如上面建议的那样,只设置名称(dfe,n)更容易,但是我认为这不会起作用,因为某些过程可能比其他过程花费更长的时间,但似乎顺序没有改变。例如当我设置

if ( id.this == "n2"){
        Sys.sleep(10)
    }

订单仍然保留。所以最终的代码会是这样的。

mainStart <- Sys.time()

n=c("n1","n2","n3","n4","n5")

cores=detectCores() 
cl <- parallel::makeCluster(cores[1]-1) #not to overload your computer
registerDoSNOW(cl)

## setup progress bar 
pb <- txtProgressBar(max = 4, style = 3)
progress <- function(n) setTxtProgressBar(pb, n)
opts <- list(progress = progress)


dfe <-  foreach(id.this = n, .options.snow = opts) %dopar% {
    #list(id.this = list(  a=c(1,2,3), b = c(1,2,3) ) )
    if ( id.this == "n2"){
        Sys.sleep(10)
    }
    list(  a=c(id.this,2,3), b = c(1,2,3) )
}

endTime <- Sys.time()
endTime -mainStart 


close(pb)
stopCluster(cl)

dfe=setNames(dfe, n)

【讨论】:

  • 是的,foreach() 函数尊重输入/迭代器的顺序,而不管顺序或并行处理(以及方式、地点和时间)。它可以这样做,因为所有元素都在foreach() 返回之前完成。
猜你喜欢
  • 2020-01-25
  • 1970-01-01
  • 2021-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多