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]]
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]]
miguel.angel.rodriguez.muinos en sergas.es
2015-May-28 20:29 UTC
[R-es] La ejecución de mi script R es muy lenta
Hola Mª Luz. Tu primer mensaje no ha llegado a la lista precisamente por el tamaño de los ficheros adjuntos. Tienes un correo del administrador al respecto. Al haber comentado tú misma ese mensaje, lo hemos podido leer todos pero no tenemos acceso al fichero Set-A.zip y al Outcomes.csv. (creo recordar que eran unos 9Mb entre los dos) Podrías pensar en colgarlos en algún sitio (tipo DropBox o similar) y compartir la URL. En caso de que tengas problemas envíame un correo e intentaré ayudarte. Un Saludo, Miguel Rodríguez Consellería de Sanidade Xunta de Galicia http://dxsp.sergas.es ________________________________________ De: R-help-es [r-help-es-bounces en r-project.org] en nombre de MªLuz Morales [mlzmrls en gmail.com] Enviado: jueves, 28 de mayo de 2015 16:14 Para: Carlos Ortega CC: R-help-es en r-project.org Asunto: Re: [R-es] La ejecución de mi script R es muy lenta 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]] _______________________________________________ R-help-es mailing list R-help-es en r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es ________________________________ Nota: A información contida nesta mensaxe e os seus posibles documentos adxuntos é privada e confidencial e está dirixida únicamente ó seu destinatario/a. Se vostede non é o/a destinatario/a orixinal desta mensaxe, por favor elimínea. A distribución ou copia desta mensaxe non está autorizada. Nota: La información contenida en este mensaje y sus posibles documentos adjuntos es privada y confidencial y está dirigida únicamente a su destinatario/a. Si usted no es el/la destinatario/a original de este mensaje, por favor elimínelo. La distribución o copia de este mensaje no está autorizada. See more languages: http://www.sergas.es/aviso_confidencialidad.htm