[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