[R] R parallel / foreach - aggregation of results
William Dunlap
wdunlap at tibco.com
Sat Aug 1 23:17:15 CEST 2015
If you return just the row that the foreach procedure produces instead of
the entire matrix containing that row and use .combine=rbind then you will
end up with the matrix of interest. E.g.,
Simpar3a <- 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, .combine = rbind) %dopar% {
library(np)
datj <- data[j]
rowJ <- numeric(n1)
for (k in j:n1) {
rowJ[k] <- k * datj
}
rowJ
}
stopCluster(cl)
x
}
Bill Dunlap
TIBCO Software
wdunlap tibco.com
On Sat, Aug 1, 2015 at 12:19 PM, Martin Spindler <Martin.Spindler at gmx.de>
wrote:
> 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.
>
> ______________________________________________
> 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]]
More information about the R-help
mailing list