- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 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 = "_"))
}
最佳答案
嵌套的正确方法foreach
循环正在使用 %:%
运算符(operator)。请参阅示例。我已经在 Windows 上测试过了。
library(foreach)
library(doSNOW)
NumberOfCluster <- 4
cl <- makeCluster(NumberOfCluster)
registerDoSNOW(cl)
N <- 1e6
system.time(foreach(i = 1:10, .combine = rbind) %:%
foreach(j = 1:10, .combine = c) %do% mean(rnorm(N, i, j)))
system.time(foreach(i = 1:10, .combine = rbind) %:%
foreach(j = 1:10, .combine = c) %dopar% mean(rnorm(N, i, j)))
> system.time(foreach(i = 1:10, .combine = rbind) %:%
+ foreach(j = 1:10, .combine = c) %do% mean(rnorm(N, i, j)))
user system elapsed
7.38 0.23 7.64
> system.time(foreach(i = 1:10, .combine = rbind) %:%
+ foreach(j = 1:10, .combine = c) %dopar% mean(rnorm(N, i, j)))
user system elapsed
0.09 0.00 2.14
foreach(i) %:% foreach(j) {foo(i, j)}
%:%
用于嵌套多个
foreach
循环。您不能在嵌套之间进行计算。在您的情况下,您必须执行两个循环,例如:
# Loop over i
x <- foreach(i = 1:10, .combine = c) %dopar% 2 ^ i
# Nested loop over i and j
foreach(i = 1:10, .combine = rbind) %:% foreach(j = 1:10, .combine = c) %dopar% {x[i] + j}
library(data.table)
library(foreach)
library(doSNOW)
NumberOfCluster <- 2
cl <- makeCluster(NumberOfCluster)
registerDoSNOW(cl)
# Create ABNs as list
ABNs <- 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')
unique(UNSPSCs_per_ABN[which(substr(UNSPSCs_per_ABN$UNSPSC,1,4) == substr(i,1,4)), 1])
}
# Nested loop
predictions <- foreach(i = UNSPSC_list, .packages = c('data.table', 'dplyr'), .verbose = TRUE) %:%
foreach(j = seq(1:nrow(train)), .combine = 'c', .packages = 'dplyr') %dopar% {
descr <- names(which(!is.na(train[j, ]) == TRUE))
if (unlist(predict_all[j, 1]) %in% unlist(ABNs[[i]]) || !unlist(predict_all[j, 1]) %in% unlist(suppliers)) {
sum(temp$Imp[which(temp$Term %in% descr)])
} else 0
}
for (i in seq_along(predictions)) save(predictions[[i]], file = paste("Predictions", i, ".rda", sep = "_"))
关于R 嵌套 foreach %dopar% 外循环和 %do% 内循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48632781/
在Windows 10的RStudio中,我编写了一个并行执行计算的函数,如下所示: doSomething = function(a, b, c) { # Inner function th
我想在同一个文件中并行写入,我测试了两种方法,writeLine 和 sink。 path_file <- "path" cl <- makeCluster(4) registerDoParallel
我有一个 foreach 循环,它使用 %dopar% 和 doSNOW 作为后端。如何让循环在每次迭代中打印出一些内容? 下面的代码是我当前正在使用的代码,但它没有打印任何内容。 foreach(n
我一直在尝试在 R 中运行一个并行化的 foreach 循环,它在大约十次迭代后工作正常,但随后崩溃,显示错误: Error in { : task 7 failed - "missing value
我正在尝试将 doMC 与 foreach 和 %dopar% 一起使用。这是函数: doTheMath_MC end) stop("end must be larger than st")
我正在编写一个函数,我想让用户选择是否并行运行。我更喜欢 foreach出于各种原因向竞争对手。到目前为止,我已经将它设置为类似于下面的虚拟函数: library(foreach) myfun <-
这个问题在这里已经有了答案: Why is the parallel package slower than just using apply? (3 个回答) 8年前关闭。 为什么foreach()
使用 doMC 和 foreach 在其内核之间分配进程时,我在计算机中遇到了奇怪的行为。有人知道为什么使用单核比使用 2 核获得更好的性能吗?如您所见,在不注册任何内核(据说只使用 1 个内核)的情
有没有办法在并行的 foreach 调用中进入浏览器模式?我尝试使用 manual = TRUE 创建集群。正如预期的那样,它需要我手动启动 R 的实例。但是,一旦实例从主进程接收到任务,它就会退出比
我想知道是否/如何将多个输出作为 foreach dopar 的一部分返回环形。 让我们举一个非常简单的例子。假设我想做 2 个操作作为 foreach 的一部分循环,并希望为 i 的每个值返回或保存
当在包的描述中仅导入(不依赖)foreach时,如何避免在包的函数中“找不到函数“%dopar%””?当我在函数中使用 foreach::foreach 时,有没有类似 foreach::%dopar
这是一个非常简单的例子。 df = c("already ","miss you","haters","she's cool") df = data.frame(df) library(doParal
我正在使用 RPostgreSQL 连接到本地数据库。该设置在我的 Linux 机器上运行良好。 R 2.11.1,Postgres 8.4。 我正在使用带有多核 (doMC) 并行后端的“forea
我在将对象从磁盘加载到内存时使用 foreach %dopar% 遇到了一些问题...当我尝试加载对象时,使用 foreach %dopar% 时没有加载对象(当我只使用 %do% 时它有效)下面是一
我在 R 中运行以下脚本。 如果我使用 %do% 而不是 %dopar% 脚本工作正常。但是,如果在外循环中我使用 %dopar% 循环将永远运行而不会引发任何错误(内存使用量不断增加,直到内存不足)
在 Windows 7 和 Ubuntu 64 位 11.04 上的 Revolution R 2.12.2 中,我有一个包含超过 100K 行和超过 100 列的数据框,并且我为每个导出约 5 列(
从 optim 调用包含 foreach %dopar% 构造的函数会导致错误: > workers > registerDoSMP(workers) > > t0 > optim(w,maxPr
我想了解以下代码的结构。想知道是否需要以不同的方式组织才能更快地执行。具体来说,我是否需要在嵌套循环中以不同的方式使用 foreach 和 dopar 。目前,内部循环是大部分工作(ddply 具有
我想使用与 doParallel 后端一起运行的 foreach every 循环,通过 RMySql 包从 MySQL 数据库获取推文。 我为每个想要查询的用户 ID 创建一个到数据库的连接,然后我
通过在使用 foreach 时将 %dopar% 更改为 %do%,我可以按顺序运行代码。如何以编程方式执行此操作? 例如。我想要以下但只有一个 foreach 语句: library(doParal
我是一名优秀的程序员,十分优秀!