After searching online, I found that clusterCall or foreach might be the
solution.
Best wishes,
Jie
On Sun, Aug 5, 2012 at 10:23 PM, Jie <jimmycloud@gmail.com> wrote:
> Dear All,
>
> Suppose I have a program as below: Outside is a loop for simulation (with
> random generated data), inside there are several sapply()'s (10~100)
over
> the data and something else, but these sapply's have to be sequential.
And
> each sapply do not involve very intensive calculation (a few seconds only).
> So the outside loop takes minutes to finish one iteration.
> I guess the better way is not to parallel sapply but the outer loop.
> But I have no idea how to modify it. I have a simple code here. Only two
> sapply's involved for simplicity. The logical in the sapply is not
> important.
> Thank you for your attention and suggestion.
>
> library(parallel)
> library(MASS)
> result.seq=c()
> Maxi <- 100
> for (i in 1:Maxi)
> {
> ## initialization, not of interest
> Sigmahalf <- matrix(sample(1:10000,size = 10000,replace =T ), 100)
> Sigma <- t(Sigmahalf)%*%Sigmahalf
> x <- mvrnorm(n=1000, rep(0, 10), Sigma)
> xlist <- list()
> for (j in 1:1000)
> {
> xlist[[j]] <- list(X = matrix( x [j, ],5))
> }
> ## end of initialization
>
> dd1 <- sapply(xlist,function(s) {min(abs((eigen(s$X))$values))})
> ##
> sumdd1=sum(dd1)
> for (j in 1:1000)
> {
> xlist[[j]]$dd1 <- dd1[j]/sumdd1
> }
> ## Assume dd2 and dd1 can not be combined in one sapply()
> dd2 <- sapply(xlist, function(s){min(abs((eigen(s$X))$values))+s$dd1})
> result.seq[i] <- sum(dd1*dd2)
>
> }
>
>
[[alternative HTML version deleted]]