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

MªLuz Morales mlzmrls en gmail.com
Jue Mayo 28 16:14:59 CEST 2015


Hola,
gracias por contestar tan rápido.
En el email he adjuntado los archivos seta y outcomes.csv, no me queda
claro como hacer para que podáis acceder a ellos de otra manera.

El 28 de mayo de 2015, 15:53, Carlos Ortega <cof en qualityexcellence.es>
escribió:

> 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