- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图寻找一个重复的问题,我知道很多人都问过 R 中的 parLapply,所以如果我遗漏了一个适用于我的情况的问题,我深表歉意。
问题:我有以下在 R 中正确运行的函数,但是当我尝试使用 parLapply 并行运行它时(我在 Windows 机器上),我得到了 $ operator is invalid for atomic vectors 的错误
。该错误提到无论我将集群设置为多少个节点,3 个节点都会产生错误,例如,我的桌面上有 8 个内核,因此我将集群设置为 7 个节点。这是显示问题所在的示例代码:
library(parallel)
library(doParallel)
library(arrangements)
#Function
perms <- function(inputs)
{
x <- 0
L <- 2^length(inputs$w)
ip <- inputs$ip
for( i in 1:L)
{
y <- ip$getnext()%*%inputs$w
if (inputs$t >= y)
{
x <- x + 1
}
}
return(x)
}
#Inputs is a list of several other variables that are created before this
#function runs (w, t_obs and iperm), here is a reproducible example of them
#W is derived from my data, this is just an easy way to make a reproducible example
set.seed(1)
m <- 15
W <- matrix(runif(15,0,1))
iperm <- arrangements::ipermutations(0:1, m, replace = T)
t_obs <- 5
inputs <- list(W,t_obs, iperm)
names(inputs) <- c("w", "t", "ip")
#If I run the function not in parallel
perms(inputs)
#It gives a value of 27322 for this example data
这完全按预期运行,但是当我尝试并行运行以下命令时出现错误
#make the cluster
cor <- detectCores()
cl<-makeCluster(cor-1,type="SOCK")
#passing library and arguments
clusterExport(cl, c("inputs"))
clusterEvalQ(cl, {
library(arrangements)
})
results <- parLapply(cl, inputs, perms)
我得到错误:
Error in checkForRemoteErrors(val) :
3 nodes produced errors; first error: $ operator is invalid for atomic vectors
不过,我已经使用 is.atomic()
检查是否有原子向量,并使用 is.recursive(inputs)
它说这是 真
。
我的问题是,当我尝试使用 parLapply
运行此函数时,为什么我会收到此错误,而该函数以其他方式正确运行并且是否有理由说“3 个节点产生了错误”,即使我有7 个节点?
最佳答案
它说“3 个节点”,因为当您将它传递给 parLapply
时,您只激活了三个节点。 parLapply
的第一个参数应该是事物的列表
,每个元素都传递给每个节点。在你的情况下,你的 inputs
是一个列表,正确的,但它正在被分解,这样你的三个节点就可以有效地看到:
# node 1
perms(inputs[[1]]) # effectively inputs$w
# node 2
perms(inputs[[2]]) # effectively inputs$t
# node 3
perms(inputs[[3]]) # effectively inputs$ip
# nodes 4-7 idle
您可以在本地主机上复制它(不是并行
):
lapply(inputs, perms)
当您这样看时,传递给节点的内容可能会变得更加明显。 (如果你想进一步查看,请执行 debug(perms)
然后运行上面的 lapply
,并查看该函数调用中的 inputs
看起来像。)
要让它在一个节点上运行一次(我认为这不是你想要做的),你可以这样做
parLapply(cl, list(inputs), perms)
但这只会在一个节点上运行一个实例。也许你更愿意做这样的事情:
parLapply(cl, replicate(7, inputs, simplify=FALSE), perms)
关于R:parLapply 中的错误 - $ 对原子向量无效仅发生在并行运行中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57331271/
我目前正在开发一个 R 包,它将通过“并行”包使用并行计算来解决一些任务。 在使用包的函数内部定义的集群时,我遇到了一些非常尴尬的行为,其中 parLapply 函数将工作分配给一个工作人员并等待它完
我试图寻找一个重复的问题,我知道很多人都问过 R 中的 parLapply,所以如果我遗漏了一个适用于我的情况的问题,我深表歉意。 问题:我有以下在 R 中正确运行的函数,但是当我尝试使用 parLa
我有一个很大的列表(~30GB)并且功能如下: cl sessionInfo() R version 3.2.2 (2015-08-14) Platform: x86_64-redhat-linux
我正在尝试通过 hargreaves 计算蒸发量package SPEI 中的方法.这涉及使用最低温度( TMIN )和最高温度 ( TMAX )。鉴于Tmin,并行计算是我最好的选择和Tmax ra
假设我想在 R 中做一些通常(在一个进程/线程中)看起来像这样的事情: for(i in 1:2) { for(j in 1:2) { #Do some stuff here
我在这里问了一个相关的问题,回复效果很好:using parallel's parLapply: unable to access variables within parallel code 问题是
我希望在 R6 对象中的窗口上使用 parLapply() ,并注意到(至少在某些情况下)我不需要导出R6 功能或数据到节点。 这是一个示例,我可以在 parLapply() 中访问私有(privat
我在 Linux 上运行并且很容易使用 mclapply。我在使用 parlapply 时遇到了一些错误,即使在使用 clusterEvalQ 之后也是如此。 在我进一步解决这个问题之前,有什么要点吗
我想使用 parLapply 并且我正在设置我的代码,就像这里介绍的那样:http://www.win-vector.com/blog/2016/01/parallel-computing-in-r/
我正在尝试在一个非常大的数据集上运行一些东西。基本上,我想遍历文件夹中的所有文件并在其上运行 fromJSON 函数。但是,我希望它跳过产生错误的文件。但是,我使用 tryCatch 构建了一个函数,
我正在使用 Rcpp 和 Windows 上的并行计算进行 R 代码优化。我在 parLapply 中调用 Rcpp 函数时遇到问题。示例如下 Rcpp 代码(test.cpp) #include
我最近开始在一个项目中使用 R 中的并行技术,并使用 mclapply 在 Linux 系统上运行我的程序。来自 parallel包裹。但是,我对 parLapply 的理解遇到了障碍。对于 Wind
我想并行化我的数据写入过程。我正在将数据框写入 Oracle 数据库。该数据有 400 万行和 8 列。没有并行化的情况下需要 6.5 小时。 当我尝试并行时,出现错误 Error in checkF
我最近得到了一台具有多个内核的计算机,并且正在学习使用并行计算。我相当精通 lapply并被告知 parLapply工作原理非常相似。我没有正确操作它。看来我必须明确地将所有内容都放在 parLapp
我是一名优秀的程序员,十分优秀!