- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在将对象从磁盘加载到内存时使用 foreach %dopar% 遇到了一些问题...当我尝试加载对象时,使用 foreach %dopar% 时没有加载对象(当我只使用 %do% 时它有效)下面是一个显示我的问题的简单示例。
envir = .GlobalEnv
x <- "X test"
y <- "Y test"
z <- "Z test"
save(x, file="x.RData")
save(y, file="y.RData")
save(z, file="z.RData")
rm(x)
rm(y)
rm(z)
objectsNamesVector <- c("x", "y", "z")
foreach(i=1:length(objectsNamesVector), .combine=function (...) NULL, .multicombine=TRUE) %do% {
print(paste("Loading object ", objectsNamesVector[i]," - ", i, " of ", length(objectsNamesVector), sep=""))
load(file=paste(objectsNamesVector[i], ".RData", sep=""), envir=envir)
}
print(x)
print(y)
print(z)
rm(x)
rm(y)
rm(z)
foreach(i=1:length(objectsNamesVector), .combine=function (...) NULL, .multicombine=TRUE) %dopar% {
print(paste("Loading object ", objectsNamesVector[i]," - ", i, " of ", length(objectsNamesVector), sep=""))
load(file=paste(objectsNamesVector[i], ".RData", sep=""), envir=envir)
}
print(x)
print(y)
print(z)
envir = .GlobalEnv
x <- "X test"
y <- "Y test"
z <- "Z test"
save(x, file="x.RData")
save(y, file="y.RData")
save(z, file="z.RData")
rm(x)
rm(y)
rm(z)
objectsNamesVector <- c("x", "y", "z")
foreach(i=1:length(objectsNamesVector), .combine=function (...) NULL, .multicombine=TRUE) %do% {
+ print(paste("Loading object ", objectsNamesVector[i]," - ", i, " of ", length(objectsNamesVector), sep=""))
+ load(file=paste(objectsNamesVector[i], ".RData", sep=""), envir=envir)
+ }
[1] "Loading object x - 1 of 3"
[1] "Loading object y - 2 of 3"
[1] "Loading object z - 3 of 3"
NULL
print(x)
[1] "X test"
print(y)
[1] "Y test"
print(z)
[1] "Z test"
rm(x)
rm(y)
rm(z)
foreach(i=1:length(objectsNamesVector), .combine=function (...) NULL, .multicombine=TRUE) %dopar% {
+ print(paste("Loading object ", objectsNamesVector[i]," - ", i, " of ", length(objectsNamesVector), sep=""))
+ load(file=paste(objectsNamesVector[i], ".RData", sep=""), envir=envir)
+ }
NULL
print(x)
Error in print(x) : object 'x' not found
print(y)
Error in print(y) : object 'y' not found
print(z)
Error in print(z) : object 'z' not found
最佳答案
我相信问题在于%do%
能够写入全局环境,而 %dopar%
不是。使用 %do%
如果您想要 foreach()
,这是非常有用的语法和其他好处,但不需要并行后端。
另外,如 %do%
是按顺序完成的,保持全局环境清洁可以留给用户,因为不会有竞争条件。在并行情况下,您可能会遇到竞争条件(即某些并行任务可能会先于其他任务完成,并且可能会产生随机的、难以重现的结果)。
由于竞争条件,如果可以避免的话,将这种操作直接写入全局环境并不是一个好主意。以后的用户可以采用这样的顺序代码并替换%do%
与 %dopar%
,希望得到更快的结果,但得不到同样的结果。值得称赞的是,您已经找到了可能发生这种情况的清晰示例。
关于r - load 不适用于 foreach 和 %dopar%,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6804229/
在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
我是一名优秀的程序员,十分优秀!