[R-br] Problemas com split+lapply

Benilton Carvalho beniltoncarvalho em gmail.com
Segunda Outubro 31 14:47:09 BRST 2011


Helber, confirme que vc nao me colocou na sua lista negra.

Rubem, tente o codigo abaixo, que seria como eu faria...

No meu computador, para 1250 niveis, eu preciso de cerca de 125sec....
o codigo e' mais lento pq um cluster com SOCK e' menos eficiente... e
o custo (tempo) para eu otimizar o codigo interno seria muito alto.

###


library(doSNOW)
library(foreach)

ncpu <- 4
cl <- makeSOCKcluster(rep("localhost",ncpu))
registerDoSNOW(cl)

mediaPorGrupo <- function(x, k, grp){
    tmp <- subset(x, R==grp$R & CC==grp$CC & TF==grp$TF)
    nr <- nrow(tmp)
    cbind(tmp[, c('P', 'R', 'TF', 'CC')],
          ma.y=as.numeric(filter(tmp$y, rep(1/k, k))),
          ma.x=as.numeric(filter(tmp$z, rep(1/k, k))))[-c(1, nr),]
}


P <- 2000:2010
Rep <- letters[1:5]
TF <- 1:2
CC <- paste("H-",101:299,sep="")
a <- expand.grid(P=P,R=Rep,TF=TF,CC=CC)
a$y <- rnorm(nrow(a))
a$z <- runif(nrow(a))

grps <- unique(a[, c('R', 'CC', 'TF')])

system.time(res <- foreach(i=1:nrow(grps), .combine=rbind) %dopar% {
    mediaPorGrupo(a, 3, grps[i,])
})


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