【发布时间】:2018-07-15 21:53:11
【问题描述】:
我正在 R 中运行以下脚本。 如果我使用 %do% 而不是 %dopar% 脚本可以正常工作。但是,如果在外部循环中我使用 %dopar% 循环将永远运行而不会引发任何错误(内存使用量不断增加,直到内存不足)。 我正在使用 16 核。
library(parallel)
library(foreach)
library(doSNOW)
library(dplyr)
NumberOfCluster <- 16
cl <- makeCluster(NumberOfCluster)
registerDoSNOW(cl)
foreach(i = UNSPSC_list, .packages = c('data.table', 'dplyr'), .verbose = TRUE) %dopar%
{
terms <- as.data.table(unique(gsub(" ", "", unlist(terms_list_by_UNSPSC$Terms[which(substr(terms_list_by_UNSPSC$UNSPSC,1,6) == i)]))))
temp <- inner_join(N_of_UNSPSCs_by_Term, terms, on = 'V1')
temp$V2 <- 1/as.numeric(temp$V2)
temp <- temp[order(temp$V2, decreasing = TRUE),]
names(temp) <- c('Term','Imp')
ABNs <- unique(UNSPSCs_per_ABN[which(substr(UNSPSCs_per_ABN$UNSPSC,1,4) == substr(i,1,4)), 1])
predictions <- as.numeric(vector())
predictions <- foreach (j = seq(1 : nrow(train)), .combine = 'c', .packages = 'dplyr') %do%
{
descr <- names(which(!is.na(train[j,]) == TRUE))
if(unlist(predict_all[j,1]) %in% unlist(ABNs) || !unlist(predict_all[j,1]) %in% unlist(suppliers)) {union_all(predictions, sum(temp$Imp[which(temp$Term %in% descr)]))} else {union_all(predictions, 0)}
}
save(predictions, file = paste("Predictions", i,".rda", sep = "_"))
}
【问题讨论】:
-
你试过
NumberOfCluster <- 2吗? -
刚刚试了,并没有解决问题。
-
所以如果没有内部
%do%循环,代码在%dopar%下运行良好? -
没有,只有当两者都是 %do% 时,代码才能正常运行。如果两者之一是 %dopar% 则它们不起作用。
-
你读过这个吗,你可以用 %:%: cran.r-project.org/web/packages/foreach/vignettes/nested.pdf 嵌套循环?
标签: r foreach parallel-processing