Skip to content

[R-es] Codigo

10 messages · Andrés Hirigoyen, Olivier Nuñez, Carlos Ortega +2 more

#
Buenos días tengo una consulta sobre un código rutinario que quiero
ejecutar.

Tengo 120 Lotes con un ID diferente (del C001 al C120) a cada uno de  los
cuales debo efectuares un GLM y con los parámetros obtenidos calcular otras
variables para luego hacer gráficas, razón por la cual no puedo procesarlos
todos juntos.
Intente hacer una sentencia repeat() o con for() para que me ejecute de
forma individual cada lote y no tener que hacerlo a mano, pero no me sale...
¿¿Alguna idea??
#
Mira lapply ....

Si L= list(L1,L2,...,L120) es una lista de tus lotes

ajuste <- function(L) glm(y~x,data=L)
fit=lapply(L1,ajuste)

donde "fit" es la lista de 120 ajustes.

Un saludo. Olivier
 
----- Mensaje original -----
De: "Andres Hirigoyen" <andreshirigoyen en gmail.com>
Para: r-help-es en r-project.org
Enviados: Lunes, 30 de Mayo 2016 14:55:19
Asunto: [R-es] Codigo

Buenos días tengo una consulta sobre un código rutinario que quiero
ejecutar.

Tengo 120 Lotes con un ID diferente (del C001 al C120) a cada uno de  los
cuales debo efectuares un GLM y con los parámetros obtenidos calcular otras
variables para luego hacer gráficas, razón por la cual no puedo procesarlos
todos juntos.
Intente hacer una sentencia repeat() o con for() para que me ejecute de
forma individual cada lote y no tener que hacerlo a mano, pero no me sale...
¿¿Alguna idea??


_______________________________________________
R-help-es mailing list
R-help-es en r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es
#
Un pequeño error.
El codigo correcto es más bien:

L= list(L1,L2,...,L120)
ajuste <- function(L) glm(y~x,data=L)
fit=lapply(L,ajuste)




----- Mensaje original -----
De: "Olivier Nuñez" <onunez en unex.es>
Para: "Andres Hirigoyen" <andreshirigoyen en gmail.com>
CC: r-help-es en r-project.org
Enviados: Lunes, 30 de Mayo 2016 15:02:30
Asunto: Re: [R-es] Codigo

Mira lapply ....

Si L= list(L1,L2,...,L120) es una lista de tus lotes

ajuste <- function(L) glm(y~x,data=L)
fit=lapply(L1,ajuste)

donde "fit" es la lista de 120 ajustes.

Un saludo. Olivier
 
----- Mensaje original -----
De: "Andres Hirigoyen" <andreshirigoyen en gmail.com>
Para: r-help-es en r-project.org
Enviados: Lunes, 30 de Mayo 2016 14:55:19
Asunto: [R-es] Codigo

Buenos días tengo una consulta sobre un código rutinario que quiero
ejecutar.

Tengo 120 Lotes con un ID diferente (del C001 al C120) a cada uno de  los
cuales debo efectuares un GLM y con los parámetros obtenidos calcular otras
variables para luego hacer gráficas, razón por la cual no puedo procesarlos
todos juntos.
Intente hacer una sentencia repeat() o con for() para que me ejecute de
forma individual cada lote y no tener que hacerlo a mano, pero no me sale...
¿¿Alguna idea??


_______________________________________________
R-help-es mailing list
R-help-es en r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es
#
Oliver gracias por le pista!
Es un poco mas complicado, el código tiene varios pasos incluidos calculo
de nuevas variables con los betas del glm y otras vueltas. Necesitaría una
sentencia que tome cada lote haga los cálculos por separado y luego los une
en el dataframe de salida

El 30 de mayo de 2016, 10:02, Olivier Nuñez <onunez en unex.es> escribió:

  
  
#
Hola,

Puedes utilizar el código de Oliver utilizando la librería "broom" que
permite obtener los parámetros (coeficientes) y características del modelo
(null.deviance, AIC, BIC) en un cómodo data.frame

El código sería algo así como esto.

library(broom)
L <- list(L1, L2..., L120)

ajuste <- function(L) {
       g <- glm(y ~., data = L)
       g_df <- tidy(g) #tidy es una función del paquete "broom" que
devuelve los coeficientes y sus errores.
       return(g_df)
}

fit <- apply(L, ajuste)


Saludos,
Carlos Ortega
www.qualityexcellence.es

El 30 de mayo de 2016, 15:15, Andres Hirigoyen <andreshirigoyen en gmail.com>
escribió:

  
    
#
Hola, yo en general uso una opción más desprolija y que puede ser menos
efectiva pero si la cantidad de lotes no es excesiva no sería
extremadamente
lenta.

Uso for() en general usando los datos de id de los animales, lotes u lo
que sea.

# inicializo una variable para almacenar resultados
salidas=NULL
for( i in unique(data$id)){
tmp=data[data$id==i,]
.........
salidas=rbind(salidas,"salidas")
}

De ahí saco lm, plots etc para cada subset de datos.
Igual no es la mejor solución pero me saca del paso.

Saludos

F. Macedo

El 30/05/16 a las 11:06, Carlos Ortega escribió:
#
Carlos, capaz no me explique bien, va de nuevo...
Tengo un dataFrame con varias variables que describen Lotes (127), he
creado un código que calcula nuevas variables, re codifica otras y ordenas
otras tantas. Es muy laborioso correr ese código 127 veces por lo cual
quería hacer un sentencia (del tipo if() o repeat()), para obtener al final
todos los lotes procesados.

Saludos y gracias por tan rápida respuesta


El 30 de mayo de 2016, 11:06, Carlos Ortega <cof en qualityexcellence.es>
escribió:

  
  
#
Hola Andrés,

Entonces todo esto lo puedes hacer con un bucle "for".
Entiendo que tienes unos datos del tipo:

Lote     V1          V2             Vn
------- -------  ----------    --------
Lote_1 valor11 valor12.... valor1n
...
Lote_N valorN1 valorN2....valorNn




Y tras procesarlo lo conviertes en algo así como

Lote     V1          V2             Vn         Vn+1            VM
------- -------  ----------    --------  -----------  ----------
Lote_1 valor11 valor12.... valor1n valor1n+1..valor1M
...
Lote_N valorN1 valorN2....valorNn valorNn+1...valorNM


Lo que harías con un bucle es incluir en cada ciclo todas esas
transformaciones que haces ahora en pasos para un "Lote_i".

for (i in 1:nrow(conjunto_Inicial) {
  conjunto_Inicial$Vn+1[i] <-
una_transformacion_en_fila_i_del_conjunto_Inicial_sobre_1_o_varias_vars
  ......
  conjunto_Inicial$VM[i] <-
otra_transformacion_en_fila_i_del_conjunto_inicialsobre_1_o_varias_vars
}


El resultado del bucle será un conjunto_Final, con las nuevas columnas
añadidas o alguna existente transformada.

¿Es esto lo que buscabas?...

Gracias,
Carlos.




El 30 de mayo de 2016, 16:19, Andres Hirigoyen <andreshirigoyen en gmail.com>
escribió:

  
    
#
Sí llamamos DF al data.frame  que tienes y DF$ID es la variable con los ID de los lotes puede hacer con el código de que dispones lo siguiente (es equivalente a un bucle for):

L <- unique(DF$ID) 
Hay que tener cuidado que  ID no sea un factor, si lo es
L <- unique(as.character(DF$ID))

Resultados <- lapply(L, function(x){

	X <- subset(DF,  ID == x)

	Aquí vendrían las operaciones que quieras hacer  con X (el data.frame para un solo ID o, como lo llamas,  lote)
	hasta que obtienes el objeto que persigues, al que llamaré Z.

	Y, por último

	return(Z)


})

names(Resultados) <-  L 

Esta última instrucción te permite conocer a que lote corresponden los resultados. 

Resultados es una lista y puedes ver uno de ellos con Resultados[["C001"]] (por ejemplo).

Espero haber sido de ayuda.


-----Mensaje original-----
De: R-help-es [mailto:r-help-es-bounces en r-project.org] En nombre de Andres Hirigoyen
Enviado el: lunes, 30 de mayo de 2016 16:20
Para: Carlos Ortega
CC: Lista R
Asunto: Re: [R-es] Codigo

Carlos, capaz no me explique bien, va de nuevo...
Tengo un dataFrame con varias variables que describen Lotes (127), he creado un código que calcula nuevas variables, re codifica otras y ordenas otras tantas. Es muy laborioso correr ese código 127 veces por lo cual quería hacer un sentencia (del tipo if() o repeat()), para obtener al final todos los lotes procesados.

Saludos y gracias por tan rápida respuesta


El 30 de mayo de 2016, 11:06, Carlos Ortega <cof en qualityexcellence.es>
escribió:
_______________________________________________
R-help-es mailing list
R-help-es en r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es
#
Pruebo y confirmo. MUCHAS GRACIAS A TODOS!!!!!!!!!!!!

El 30 de mayo de 2016, 11:36, Bartolomé Marcos, José Antonio <
josea.bartolome en mineco.es> escribió: