Dear all,
when I am running the code attached below, it seems that no results are
returned, only the predefined NAs. What mistake do I make?
Any comments and help is highly appreciated.
Thanks and best,
Martin
Simpar3 <- function(n1) {
L2distance <- matrix(NA, ncol=n1, nrow=n1)
data <- rnorm(n1)
diag(L2distance)=0
cl <- makeCluster(4)
registerDoParallel(cl)
foreach(j=1:n1) %dopar% {
library(np)
datj <- data[j]
for(k in j:n1) {
L2distance[j,k] <- k*datj
}
}
stopCluster(cl)
return(L2distance)
}
Res <- Simpar3(100)
Martin,
I think the main problem is that you are trying to assign your results
to the result matrix inside the foreach loop. Parallel functions in R
are generally not good at updating parts of matrices from the different
workers in this way. Instead, using e.g. foreach, each loop of the
foreach-call has to return a vector which can be cbind-ed to a result
matrix. Something like:
L2distance = foreach(j=1:n1, .combine = cbind) %dopar% {
res = rep(NA, 10)
for (k in j:n1) res[k] = k*data[j]
res
}
L2distance
I am not sure what the np-library is, but you should consider putting it
in a clusterExport-call after creating the cluster.
Best wishes,
Jon
On 7/31/2015 2:39 PM, Martin Spindler wrote:> Dear all,
>
> when I am running the code attached below, it seems that no results are
returned, only the predefined NAs. What mistake do I make?
> Any comments and help is highly appreciated.
>
> Thanks and best,
>
> Martin
>
>
> Simpar3 <- function(n1) {
> L2distance <- matrix(NA, ncol=n1, nrow=n1)
> data <- rnorm(n1)
> diag(L2distance)=0
> cl <- makeCluster(4)
> registerDoParallel(cl)
> foreach(j=1:n1) %dopar% {
> library(np)
> datj <- data[j]
> for(k in j:n1) {
> L2distance[j,k] <- k*datj
> }
> }
> stopCluster(cl)
> return(L2distance)
> }
>
> Res <- Simpar3(100)
>
> ______________________________________________
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
--
Jon Olav Sk?ien
Joint Research Centre - European Commission
Institute for Environment and Sustainability (IES)
Climate Risk Management Unit
Via Fermi 2749, TP 100-01, I-21027 Ispra (VA), ITALY
jon.skoien at jrc.ec.europa.eu
Tel: +39 0332 789205
Disclaimer: Views expressed in this email are those of the individual
and do not necessarily represent official views of the European Commission.
Try this chance to actually return values:
library(doParallel)
Simpar3 <- function(n1) {
L2distance <- matrix(NA, ncol=n1, nrow=n1)
data <- rnorm(n1)
diag(L2distance)=0
cl <- makeCluster(4)
registerDoParallel(cl)
x <- foreach(j=1:n1) %dopar% {
library(np)
datj <- data[j]
for(k in j:n1) {
L2distance[j,k] <- k*datj
}
L2distance # return the value
}
stopCluster(cl)
return(x)
}
Res <- Simpar3(100)
Jim Holtman
Data Munger Guru
What is the problem that you are trying to solve?
Tell me what you want to do, not how you want to do it.
On Fri, Jul 31, 2015 at 8:39 AM, Martin Spindler <Martin.Spindler at
gmx.de>
wrote:
> Dear all,
>
> when I am running the code attached below, it seems that no results are
> returned, only the predefined NAs. What mistake do I make?
> Any comments and help is highly appreciated.
>
> Thanks and best,
>
> Martin
>
>
> Simpar3 <- function(n1) {
> L2distance <- matrix(NA, ncol=n1, nrow=n1)
> data <- rnorm(n1)
> diag(L2distance)=0
> cl <- makeCluster(4)
> registerDoParallel(cl)
> foreach(j=1:n1) %dopar% {
> library(np)
> datj <- data[j]
> for(k in j:n1) {
> L2distance[j,k] <- k*datj
> }
> }
> stopCluster(cl)
> return(L2distance)
> }
>
> Res <- Simpar3(100)
>
> ______________________________________________
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
[[alternative HTML version deleted]]
Dear Jim,
Thank you very much for your response. It seems to work now, but the return
value is not the required matrix but a list of matrices (one for each repition
j).
Any idea how it is possible to return only the last matrix and not all?
Thanks and best,
Martin
?
?
Gesendet:?Freitag, 31. Juli 2015 um 18:22 Uhr
Von:?"jim holtman" <jholtman at gmail.com>
An:?"Martin Spindler" <Martin.Spindler at gmx.de>
Cc:?"r-help at r-project.org" <r-help at r-project.org>
Betreff:?Re: [R] R parallel / foreach - aggregation of results
Try this chance to actually return values:
?
?
library(doParallel)
Simpar3 <- function(n1) {
?? L2distance <- matrix(NA, ncol=n1, nrow=n1)
?? data <- rnorm(n1)
?? diag(L2distance)=0
?? cl <- makeCluster(4)
?? registerDoParallel(cl)
?? x <- foreach(j=1:n1)? %dopar% {
???? library(np)
???? datj <- data[j]
???? for(k in j:n1) {
?????? L2distance[j,k] <- k*datj
???? }
???? L2distance? # return the value
?? }
?? stopCluster(cl)
?? return(x)
?}
?Res <- Simpar3(100)
?
Jim Holtman
Data Munger Guru
?
What is the problem that you are trying to solve?
Tell me what you want to do, not how you want to do it.?
On Fri, Jul 31, 2015 at 8:39 AM, Martin Spindler <Martin.Spindler at
gmx.de> wrote:Dear all,
when I am running the code attached below, it seems that no results are
returned, only the predefined NAs. What mistake do I make?
Any comments and help is highly appreciated.
Thanks and best,
Martin
Simpar3 <- function(n1) {
? L2distance <- matrix(NA, ncol=n1, nrow=n1)
? data <- rnorm(n1)
? diag(L2distance)=0
? cl <- makeCluster(4)
? registerDoParallel(cl)
? foreach(j=1:n1)? %dopar% {
? ? library(np)
? ? datj <- data[j]
? ? for(k in j:n1) {
? ? ? L2distance[j,k] <- k*datj
? ? }
? }
? stopCluster(cl)
? return(L2distance)
}
Res <- Simpar3(100)
______________________________________________
R-help at r-project.org[R-help at r-project.org] mailing list -- To UNSUBSCRIBE
and more, see
https://stat.ethz.ch/mailman/listinfo/r-help[https://stat.ethz.ch/mailman/listinfo/r-help]
PLEASE do read the posting guide
http://www.R-project.org/posting-guide.html[http://www.R-project.org/posting-guide.html]
and provide commented, minimal, self-contained, reproducible code.