[R-br] Junção de dados no mclapply

Junior Beleti beleti.junior em gmail.com
Sexta Dezembro 21 10:52:00 BRST 2012


Bom dia a todos.

Estou realizando experimentos para execução paralela. Para isso criei uma
função que realiza a multiplicação de matrizes na sua forma digamos
"primitiva", ou seja, como na matemática mesmo, realizando a multiplicação
linha por coluna.

Sei que existe o operador %*% que já realiza a multiplicação matricial,
porém, como já disse antes, estou apenas realizando experimentos.

Segue código:

m1 <- matrix(0,3,3) #criando matriz
m1[1,1]<-1
m1[1,2]<-2
m1[1,3]<-3
m1[2,1]<-4
m1[2,2]<-1
m1[2,3]<-4
m1[3,1]<-2
m1[3,2]<-3
m1[3,3]<-2
m2 <- matrix(0,3,3) #criando matriz
m2[1,1]<-2
m2[1,2]<-1
m2[1,3]<-2
m2[2,1]<-3
m2[2,2]<-4
m2[2,3]<-1
m2[3,1]<-2
m2[3,2]<-3
m2[3,3]<-3
m3 <- matrix(0,3,3) #criando matriz

numlinha<-3
numcoluna<-3
N<-3

#funcao que realiza a multiplicação
myf = function(N,mat1,mat2,num,x,y){
   num + (mat1[x,N] * mat2[N,y])
}

#forma sequencial (já testada e que está correta)
aux <-0
for(i in 1:numlinha){
  for(j in 1:numcoluna){
    for(k in 1:N){
       aux <-myf(k,m1,m2,aux,i,j)
    }
    m3[i,j] <- aux
    aux <-0
  }
}

## resultado da execucao:
## matriz m1 multiplicada pela matriz m2 que gera a matriz m3
> m1
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    1    4
[3,]    2    3    2

> m2
     [,1] [,2] [,3]
[1,]    2    1    2
[2,]    3    4    1
[3,]    2    3    3

> m3
     [,1] [,2] [,3]
[1,]   14   18   13
[2,]   19   20   21
[3,]   17   20   13

Se eu fosse utilizar a função mclapply, ao invés das tres repetições (for),
bastaria colocar:

require(parallel)
aux <- 0
for(i in 1:numlinha){
  mclapply(1:numcoluna,function(h){
    for(k in 1:N){
       aux <-myf(k,m1,m2,aux,i,h)
    }
    m3[i,h] <- aux
    aux <-0
  },mc.cores=2)
}

O problema é que não consigo armazenar os valores em cada posição da matriz
(m3[i,h] <- aux), ou seja, ele não salva na matriz de destino m3, visto que
isso ocorre dentro da chamado ao mclapply. Tentei utilizar o "unlist" mas
não obtive sucesso.

Alguem pode me auxiliar com isso?

Att,

Junior Beleti.
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20121221/1f1b34b3/attachment.html>


Mais detalhes sobre a lista de discussão R-br