作者tony255034 (5245566)
看板R_Language
标题[问题] for 回圈的平行运算
时间Wed Oct 21 19:51:34 2015
[问题类型]:
程式谘询(我想用R 做某件事情,但是我不知道要怎麽用R 写出来)
[软体熟悉度]:
新手(没写过程式,R 是我的第一次)
[问题叙述]:
目前有一个数学模型,每次要跑20秒,惩罚系数大约为16*16种组合
想利用版上所说的RMPI来优化程式,但我是用双for回圈来代入惩罚系数的
目前是想平行运算各组合,将各组合结果储存到一个阵列,
再去找出最小的AIC
[程式范例]:
wn = seq(0.25,1,0.05)
wn1 = seq(0.25,1,0.05)
AIC0 = 10^6
for(i in 1:length(wn)){
for(j in 1:length(wn1)){
list[AIC,BIC] = Model(wn[i],wn1[j]);
if(AIC < AIC0){
finalAIC = AIC
finalBIC = BIC
}
}
}
[环境叙述]:
Win7 32bit R3.2.2
[关键字]:
Parallel Computing、RMPI
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.195.74.150
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1445428297.A.5AF.html
另外想请教一下这个错误要怎麽解决?
Error in mpi.comm.spawn(slave = mpitask, slavearg = args,
nslaves = count, :
Other MPI error, error stack:
RMPI不知道为何在我的电脑会出现这个错误 所以我就改用parallel这个函式库
library(parallel)
inputs <- 1:256
processInput <- function(i){
wn = seq(0.25,1,0.05)
wn1 = seq(0.25,1,0.05)
wnpair <- data.frame("wn0" = double(), "wn1" = double(),
stringsAsFactors=FALSE)
for(i in 1:length(wn)){
for(j in 1:length(wn1)){
wnpair[nrow(wnpair) + 1,] <- c(wn[i],wn1[j])
}
}
wnpair$wn0[i] * wnpair$wn1[i]
}
numCores <- detectCores()
c1 <- makeCluster(numCores)
results = parLapply(c1,inputs,processInput)
stopCluster(c1)
所得出的results变成256个0.25 而不是两两相乘 版上各位大大可以教学一下吗?
1F:→ Wush978: 没有要跨电脑的话,就不须要用MPI 10/21 21:36
2F:→ Wush978: 直接看看parallel或snow等套件吧 10/21 21:36
3F:→ tony255034: 了解 parallel可以直接代入两个参数吗?? 10/21 21:39
4F:→ Wush978: 应该不能吃两个参数,但是你可以用expand.grid展开一个 10/21 21:42
5F:→ Wush978: c(length(wn) * length(wn1), 2)的矩阵,里面列出i,j的所 10/21 21:43
6F:→ Wush978: 有组合 10/21 21:43
感谢 有试了expand.grid 但不知道代入function後要如何分别用两个参数
library(parallel)
inputs <- 1:256
wn = seq(0.25,1,0.05)
wn1 = seq(0.3,1,0.05)
processInput <- function(i) {
i$Var1 + i$Var2
}
inputs <- expand.grid(wn,wn1)
numCores <- detectCores()
# results = mclapply(inputs, processInput, mc.cores = numCores)
# the above won't work on Windows, but this will:
cl <- makeCluster(numCores)
results = parLapply(cl, inputs, processInput)
stopCluster(cl)
会得到错误
Error in checkForRemoteErrors(val) :
2 nodes produced errors; first error: $ operator is invalid for atomic
vectors
※ 编辑: tony255034 (123.195.74.150), 10/21/2015 22:28:29
7F:→ Wush978: 只丢一维的变数到第一个参数,在函数里面用expand.grid 10/22 00:58
8F:→ Wush978: 的结果再展开成二维 10/22 00:58