[R-es] La ejecución de mi script R es muy lenta

Carlos Ortega cof en qualityexcellence.es
Jue Mayo 28 15:53:49 CEST 2015


Hola,

Si no tienes inconveniente en compartir tu conjunto de datos (puedes
dejarlo en un Dropbox y compartir enlace) o incluir una salida de la
variables: "seta" y "outcomes" (función "save.image()") con eso podemos
darte alguna solución mucho más rápida que la que planteas.

En tu código con un bucle estás tratando de rellenar una lista que son los
diferentes agregados y esto se puede hacer mucho más rápido (segundos) con
varios paquetes: data.table, dplyr y sqldf.


Saludos,
Carlos Ortega
www.qualityexcellence.es

El 28 de mayo de 2015, 15:34, <javier.ruben.marcuzzi en gmail.com> escribió:

> Estimada María Luz Morales
>
>
> Puedes intentar con data.table y reemplazar for por algina otra opción
> vectorizada, aunque en R moderno esto mejoró, y la posibilidad de compile
> debería ser evaluada.
>
>
>
>
>
>
> Javier Rubén Marcuzzi
> Técnico en Industrias Lácteas
> Veterinario
>
>
>
>
>
> De: MªLuz Morales
> Enviado el: ‎jueves‎, ‎28‎ de ‎mayo‎ de ‎2015 ‎10‎:‎21‎ ‎a.m.
> Para: R-help-es en r-project.org
>
>
>
>
>
> En el correo anterior se me olvidó mencionar que trabajo con Rstudio
>
> El 28 de mayo de 2015, 15:18, MªLuz Morales <mlzmrls en gmail.com> escribió:
>
> > Hola,
> > soy nueva en esta lista y también en R. Yo he realizado un  script en R
> > que  carga dos archivos csv, uno de ellos con casi 2 millones de filas.
> El
> > programa carga esos archivos a data frame, y se trata simplemente de
> > seleccionar ciertos datos, hacer alguna operación (media, minimo, máximo)
> > y  presentarlos en una tabla que tendrá 4000 filas. La ejecución de este
> > programa ha tardado casi 3 horas!!!!, podéis decirme si R es lento en
> esta
> > operación o es que mi código no está optimizado y no estoy haciéndolo de
> la
> > forma correcta.
> > El código de mi programa es el siguiente:
> >
> >
> >
> #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> > ## Set-A.csv y Outcomes.csv deben estar en el directorio actual
> > #  Transforma csv a data frame
> > seta <- read.csv('Set-A.csv');
> > outcomes <- read.csv('Outcomes-A.csv');
> >
> > ids <- as.character(unique(outcomes$RecordID));
> > ## Número de RecordsID distintos
> > Length_ids <- length(ids); #número de RecordsID distintos
> > ListaABP <- list('RecordID'=-1,'SAPS.I'=-1, 'SOFA'=-1, 'Survival'=-1,
> > 'In.hospital_death'=-1, 'NISysABP_Min'=-1,'NISysABP_Max'=-1,
> > 'NISysABP_Mean'=-1, 'NIDiasABP_Min'=-1,'NIDiasABP_Max'=-1,
> > 'NIDiasABP_Mean'=-1,'NIMAP_Min'=-1,'NIMAP_Max'=-1, 'NIMAP_Mean'=-1);
> > for (i in 1:Length_ids){#NumRecordID){   # Para cada paciente...
> >
> >   ListaABP$RecordID[i] <- outcomes$RecordID[i];
> >   ListaABP$SAPS.I[i] <- outcomes$SAPS.I[i];
> >   ListaABP$SOFA[i] <- outcomes$SOFA[i];
> >   ListaABP$Survival[i] <- outcomes$Survival[i];
> >   ListaABP$In.hospital_death[i] <- outcomes$In.hospital_death[i];
> >
> >   # Parameter == 'NISysBP'
> >   #seta_NISysABP <- seta[seta$RecordID == ids[i] & seta$Parameter ==
> > 'NISysABP' , c('RecordID','Value')] ;
> >   seta_NISysABP <- seta[seta$RecordID == ids[i] & seta$Parameter ==
> > 'NISysABP' , 'Value'] ; #Creo que esto ya no sería un dataframe, por lo
> que
> > en la siguiente línea puede dar error
> >   ListaABP$NISysABP_Min[i] <- min(seta_NISysABP);
> >   ListaABP$NISysABP_Max[i] <- max(seta_NISysABP);
> >   ListaABP$NISysABP_Mean[i] <- mean(seta_NISysABP);
> >
> >   # Parameter == 'NIDiasABP'
> >   #seta_NIDiasABP <- seta[seta$RecordID == ids[i] & seta$Parameter ==
> > 'NIDiasABP' , c('Time','Value')] ; #En este caso la forma de hacer el min
> > sería ...min(seta_NIDiasABP$Value);
> >   seta_NIDiasABP <- seta[seta$RecordID == ids[i] & seta$Parameter ==
> > 'NIDiasABP' , 'Value'] ;
> >   ListaABP$NIDiasABP_Min[i] <- min(seta_NIDiasABP);
> >   ListaABP$NIDiasABP_Max[i] <- max(seta_NIDiasABP);
> >   ListaABP$NIDiasABP_Mean[i] <- mean(seta_NIDiasABP);
> >
> >   # Parameter == 'NIMAP'
> >   #seta_NIMAP <- seta[seta$RecordID == ids[i] & seta$Parameter == 'NIMAP'
> > , c('Time','Value')] ;
> >   seta_NIMAP <- seta[seta$RecordID == ids[i] & seta$Parameter == 'NIMAP'
> ,
> > 'Value'] ;
> >   ListaABP$NIMAP_Min[i] <- min(seta_NIMAP);
> >   ListaABP$NIMAP_Max[i] <- max(seta_NIMAP);
> >   ListaABP$NIMAP_Mean[i] <- mean(seta_NIMAP);
> >
> > }#for i
> >
> > Tabla <- data.frame(ListaABP);
> >
> >
> >
> #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> >
> > Gracias de antemano
> > Un saludo
> > MªLuz
> >
> >
>
>  [[alternative HTML version deleted]]
>
> _______________________________________________
> R-help-es mailing list
> R-help-es en r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>         [[alternative HTML version deleted]]
>
> _______________________________________________
> R-help-es mailing list
> R-help-es en r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>



-- 
Saludos,
Carlos Ortega
www.qualityexcellence.es

	[[alternative HTML version deleted]]



Más información sobre la lista de distribución R-help-es