簡體   English   中英

在R中並行化嵌套的for循環

[英]parallelize a nested for loop in R

我想並行化R中的以下代碼。這是一個嵌套的for循環。

for (i in 1:nrow(my_dataset_preprocessed)){
    for (j in 1:ncol(my_dataset_preprocessed)){
      my_dataset_preprocessed[i,j] = min( my_dataset_preprocessed[i,j], 0.1 ) 
    }
}

我正在嘗試使用doParallel的以下代碼

library(foreach)
library(doParallel)
registerDoParallel(detectCores())
clusterExport(cl, "my_dataset")

threshold_par <- function (X) { 
  co <- foreach(i=1:nrow(X)) %:%
                foreach (j=1:ncol(X)) %dopar% {   
                  co = min( X[i,j], 0.1 )
                }
  matrix(unlist(co), ncol=ncol(X))
}

system.time(threshold_par(my_dataset))

但是我收到以下錯誤:

{中的錯誤:任務1失敗-“參數的'類型'(列表)無效”

有沒有更好的方法來並行化此代碼(可能使用parLapply)? 如果沒有,如何解決以上代碼?

您沒有聲明cl 如果刪除clusterExport(cl, "my_dataset")以下方法會起作用

library(foreach)
library(doParallel)    
registerDoParallel(detectCores())
getDoParWorkers()
# [1] 8

threshold_par <- function (X) { 
  co <- foreach(i=1:nrow(X)) %:%
                foreach (j=1:ncol(X)) %dopar% {   
                  co = min( X[i,j], 0.1 )
                }
  matrix(unlist(co), ncol=ncol(X))
}

test <- matrix(1:4, ncol=2)
system.time(threshold_par(test))
#      user  system elapsed 
#      0.01    0.00    0.02

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM