Foro de debate

Guardar salida de un cliclo (for) en R

Guardar salida de un cliclo (for) en R

de Yaritza Gomez -
Número de respuestas: 5
Hola estoy haciendo unos cáculos en R con un ciclo (for) en R y necesito guardar la salida que debe ser una hoja de datos, pero cuando lo hago solo se me guarda la salida de la última i del ciclo. Si me pueden ayudar, aquí está el código

MediaEstaciones <- read.csv("MediaEstacionesReg.csv")
MediaRegiones <- read.csv("MediaRegiones.csv")

#Calculo de coeficientes

for (i in 1:dim(MediaEstaciones)[1])

{ if (MediaEstaciones[i,3]=="OC")
P<-(MediaEstaciones[i,4:15]/MediaRegiones[1,4:15])}
En respuesta a Yaritza Gomez

Re: Guardar salida de un cliclo (for) en R

de Manuel Muñoz Márquez -
Hola Yaritza y foreros:

No has puesto en el mensaje cómo estás guardando el resultado. Si bien sospecho que lo que estás guardando es P.

Aunque el cálculo de P está dentro de un bucle, en cada momento P contiene un único valor. Podrías utilizar un vector P para guardar los valores y luego guardar el vector con la instrucción write.csv.

Por ejemplo:
MediaEstaciones <- read.csv("MediaEstacionesReg.csv")
MediaRegiones <- read.csv("MediaRegiones.csv")

P <- numeric(dim(MediaEstaciones)) for (i in 1:dim(MediaEstaciones)[1]) { if (MediaEstaciones[i,3]=="OC") P[i] <- (MediaEstaciones[i,4:15]/MediaRegiones[1,4:15])} else P[i] <- Na }

write.csv(P, file='nombre.csv')

Saludos.


En respuesta a Manuel Muñoz Márquez

Re: Guardar salida de un cliclo (for) en R

de Yaritza Gomez -
Hola, agradezco su respuesta. Efectivamente el resultado lo estaba guardando en P y la solución que me brindas me ayuda pero no del todo, ahora se me guarda pero un una lista todo junto, lo que necesito es que se guarde en forma de dataframe o matrix. Yo supongo que P debo declararla como arreglo o matrix vacía para que luego su guarde como deseo, lo que no se es como declarlo de esa manera, no se si ahora me entiendes mejor.
En respuesta a Yaritza Gomez

Re: Guardar salida de un cliclo (for) en R

de Manuel Muñoz Márquez -
Hola Yaritza y foreros.

P se ha declarado como un vector (o si prefieres un arreglo). La salida es un fichero csv que contiene un valor por cada fila.

Si lo guardases como data.frame el fichero resultante sería muy parecido.

¿Con qué software estás abriendo el fichero csv?

¿Para qué vas a utilizar dicho fichero?

Cuantas más pistas des más fácil será ayudarte.

Saludos.
En respuesta a Manuel Muñoz Márquez

Re: Guardar salida de un cliclo (for) en R

de Yaritza Gomez -
Hola, mira mi fichero MediaEstaciones es un dataframe que contiene valores de una variable en un determinado período de años (filas) para los diferentes meses (columnas). Yo necesito que P me aparezca de la misma manera, es decir, el resultado debe aparecerme como una matrix, para todas las filas donde se cumpla la condición, debe calcularse la división y finalmente en P deben aparecer los valores calculados para todas esas filas.

Con la opción que me dabas, todo se me guarda en una sola fila consecutiva, por ejemplo si uso este codigo

for (i in 1:dim(MediaEstaciones)[1])

{ if (MediaEstaciones[i,3]=="OC")
P<-(MediaEstaciones[i,4:15]/MediaRegiones[1,4:15])}

Me sale como deseo, pero solo la última fila donde se cumple la condición, por eso supongo que a P debo declararlo como un matrix con igual dim que MediaEstaciones, para que me guarde todas las filas que cumplan la condición en P, eso es lo que no se hacer.
En respuesta a Yaritza Gomez

Re: Guardar salida de un cliclo (for) en R

de Yaritza Gomez -
Hola, mira otra manera de preguntar, es simple, si yo tengo un dataframe con 5 filas y 10 columnas y yo necesito pasar a otro fichero todas las filas que cumplan una condicion, supongamos que son 3, cómo yo las guardo en un nuevo fichero mediante un ciclo (for) utilizando el (if) para evaluar la condicion?
el nuevo fichero debe ser según se plantea una dataframe de 3 filas(las que cumplen la condición) y 10 columnas.
En principio ese es el problema que yo tengo, creo que así es más facil de aclarar.
Muchas gracias por la atención y espero ahora haberme explicado mejor.