[R-es] problemas con tryCatch
Buenos días, Quiero hacer una función con un "if", que si devuelve un error dentro de él se pare la ejecución de la función devolviendo un valor. El código que tengo, para las pruebas, es el siguiente: prueba<-function(a){ b<-"no ha hecho stop" c<-"hago el stop" if(a<3){ variable<-"hola" tryCatch({ write("entro en el tryCatch","") d<-variable*3 },error=function(e){ return(c) stop(write("ha dado error","")) }) }else{ b<-a*a*a } return (b) } prueba(2) La salida que me devuelve R por pantalla es: entro en el tryCatch [1] "no ha hecho stop" Cuando la que yo quiero es: entro en el tryCatch ha dado error [1] "hago el stop" Es decir que me saque por pantalla el mensaje que tengo en el stop y que la salida de la función sea la variable c. Muchas gracias por vuestra ayuda. Un saludo ___ R-help-es mailing list R-help-es@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es
Re: [R-es] problemas con tryCatch
Hola, Mira esta referencia sobre cómo usar "tryCatch()": http://www.win-vector.com/blog/2012/10/error-handling-in-r/ Saludos, Carlos Ortega El 28 de mayo de 2015, 10:50, Sergio Castro < castro.rodriguez.ser...@gmail.com> escribió: > Buenos días, > > Quiero hacer una función con un "if", que si devuelve un error dentro > de él se pare la ejecución de la función devolviendo un valor. El > código que tengo, para las pruebas, es el siguiente: > > prueba<-function(a){ > b<-"no ha hecho stop" > c<-"hago el stop" > if(a<3){ > variable<-"hola" > tryCatch({ > write("entro en el tryCatch","") > d<-variable*3 > },error=function(e){ > return(c) > stop(write("ha dado error","")) > }) > }else{ > b<-a*a*a > } > return (b) > } > > prueba(2) > > La salida que me devuelve R por pantalla es: > > entro en el tryCatch > [1] "no ha hecho stop" > > Cuando la que yo quiero es: > > entro en el tryCatch > ha dado error > [1] "hago el stop" > > Es decir que me saque por pantalla el mensaje que tengo en el stop y > que la salida de la función sea la variable c. > > Muchas gracias por vuestra ayuda. > > Un saludo > > ___ > R-help-es mailing list > R-help-es@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@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es
Re: [R-es] La ejecución de mi script R es muy lenta
En el correo anterior se me olvidó mencionar que trabajo con Rstudio El 28 de mayo de 2015, 15:18, MªLuz Morales 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@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es
Re: [R-es] problemas con tryCatch
Muchas gracias, Eso me ayuda en casi todo lo que necesito, a excepción del return. Si meto un return dentro del error, falla y sale del tryCatch, siguiendo con la ejecución. Mi flujo es el siguiente: Tengo una función A que llama a la función B. En la función B tengo el tryCatch. Si se produce un error en B, que lo tengo controlado por el tryCatch, quiero devolver un valor KO a la función A y parar la ejecución de B en ese punto. Un saludo. El día 28 de mayo de 2015, 13:30, Carlos Ortega escribió: > Hola, > > Mira esta referencia sobre cómo usar "tryCatch()": > > http://www.win-vector.com/blog/2012/10/error-handling-in-r/ > > Saludos, > Carlos Ortega > > El 28 de mayo de 2015, 10:50, Sergio Castro > escribió: >> >> Buenos días, >> >> Quiero hacer una función con un "if", que si devuelve un error dentro >> de él se pare la ejecución de la función devolviendo un valor. El >> código que tengo, para las pruebas, es el siguiente: >> >> prueba<-function(a){ >> b<-"no ha hecho stop" >> c<-"hago el stop" >> if(a<3){ >> variable<-"hola" >> tryCatch({ >> write("entro en el tryCatch","") >> d<-variable*3 >> },error=function(e){ >> return(c) >> stop(write("ha dado error","")) >> }) >> }else{ >> b<-a*a*a >> } >> return (b) >> } >> >> prueba(2) >> >> La salida que me devuelve R por pantalla es: >> >> entro en el tryCatch >> [1] "no ha hecho stop" >> >> Cuando la que yo quiero es: >> >> entro en el tryCatch >> ha dado error >> [1] "hago el stop" >> >> Es decir que me saque por pantalla el mensaje que tengo en el stop y >> que la salida de la función sea la variable c. >> >> Muchas gracias por vuestra ayuda. >> >> Un saludo >> >> ___ >> R-help-es mailing list >> R-help-es@r-project.org >> https://stat.ethz.ch/mailman/listinfo/r-help-es > > > > > -- > Saludos, > Carlos Ortega > www.qualityexcellence.es ___ R-help-es mailing list R-help-es@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es
Re: [R-es] La ejecución de mi script R es muy lenta
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@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 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@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es [[alternative HTML version deleted]] ___ R-help-es mailing list R-help-es@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es
Re: [R-es] La ejecución de mi script R es muy lenta
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, 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@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 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@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > [[alternative HTML version deleted]] > > ___ > R-help-es mailing list > R-help-es@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@r-p
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 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, 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@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 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@r-project.org >> https://stat.ethz.ch/mailman/listinfo/r-help
Re: [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-boun...@r-project.org] en nombre de MªLuz Morales [mlzm...@gmail.com] Enviado: jueves, 28 de mayo de 2015 16:14 Para: Carlos Ortega CC: R-help-es@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 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, 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@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 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); >>