R:doSNOW/foreach创建列表列表



Hi我想使用doSNOW/foreach包创建一个列表的命名列表。例如,最终产品将是一个列表对象。dfe由一个矢量命名,比如

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

以便我可以访问类似CCD_ 1的列表对象的列表,其中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。

如上所述,只设置名称(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)

相关内容

  • 没有找到相关文章

最新更新