[R-br] Problemas com split+lapply

Rubem Kaipper Ceratti rubem_ceratti em yahoo.com.br
Terça Novembro 1 09:12:20 BRST 2011


Benilton, novamente obrigado pela resposta e tempo. Antes de executar o seu código, porém, eu tentei rodar o seguinte:

##
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))

# Alternativa 3
library(snow)
ncpu<-4
cl<-makeSOCKcluster(rep("localhost",ncpu))
clusterEvalQ(cl,library(zoo))
clusterExport(cl,'a')

ind<-split(seq(nrow(a)),list(a$R,a$CC,a$TF))
a.2<-parLapply(cl,ind,function(i,k){
cbind(ma.y=c(rep(NA,k-1),rollmean(a$y[i],k)),
ma.z=c(rep(NA,k-1),rollmean(a$z[i],k)))
},k=3)
a.2.1<-cbind(a,do.call(rbind,a.2))
a.2.2<-na.omit(a.2.1)



Eu fiz um split dos índices para depois juntar as médias móveis 'a.2' na base 'a'. Tudo vai muito bem até que ao juntar as duas partes, quando para algumas linhas os valores ficam incorretos.

Uma outra tentativa foi:

##
# Alternativa 4
ma.fun<-function(x,k){
  c(rep(NA,k-1),rollmean(x,k))
}

library(data.table)
a.3<-data.table(a)
a.3.1<-a.3[,list(P,y=ma.fun(y,k=3),z=ma.fun(z,k=3)),by=list(R,CC,TF)]
a.3.2<-na.omit(a.3.1)


Mas na base original tem algumas combinações de níveis inexistentes e dá erro, avisando que estes 'tratamentos' tem comprimento zero. Como eu poderia lidar com isso na função 'ma.fun'?

Grato,
Rubem
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20111101/ff851732/attachment.html>


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