Hola Isa,

    Lo que comentas se puede hacer.

Antes de nada un detalle, tal como lo estas planteando puede ser más cómodo que los ajustes los guardes en una lista. Por ejemplo, de la forma:
glm.fit <- list()
...
glm.fit[[i]] <- glm(...)
...
Así tienes controlados los objetos en lugar de solo el nombre...

Para programar cosas de ese estilo (emulando desde el código la forma de proceder en la consola ), podemos recurrir a funciones como assign() o do.call(). Por ejemplo creo que con do.call podrías hacer fácilmente lo que pretendes (e.g. res[[i]] <- do.call("step", glm.fit[i]), porque glm.fit[i] es ya una lista...).

Pero quería aprovechar para comentar que R es un lenguaje interpretado. Escribes un texto en la consola que luego es analizado (parseado) y evaluado. Para ver un poco como funciona R podríais consultar por ejemplo http://adv-r.had.co.nz/Computing-on-the-language.html. Lo que esta haciendo el interprete de comandos (la consola) se puede hacer con el código (e incluso deshacerlo: substitute(), quote()). Lo que realmente quería comentar es que con las funciones eval(parse(text)) podéis evaluar en R cualquier expresión de texto como si se introdujera en la consola. Yo lo tengo empleado alguna vez...

     Espero que sirva de ayuda (y corregidme si veis cualquier cosa...).

    Un saludo, Rubén.

P.D. Si queréis crear una lista de la dimensión correcta glm.fit <- vector("list", np) podría ser más adecuado. Realmente no es importante en este caso...


El 04/02/2015 a las 11:07, Isa García Barón escribió:
Hola, espero explicar bien el problema que tengo.

Estoy intentando hacer loops para glm's. El problema vieneal nombrar cada
glm de una manera y realizar la seleccion por AIC mediante la función step.

Cuando realizo los glm utilizo las funcion assign y paste0, para nombrar a
cada uno distinto:

asssign(paste0("glm",i),glm(ap~V1+V2+V3+V4+V5,data=datos,family =
binomial(link=logit)))

Después, lo que pretendo es realizar la selección por AIC, mediante la
función step para cada glm credo anteriormente y ahí viene el problema, no
se cómo decirle que me haga el step para cada glm con cada nombre creado
anteriormente:

assign(paste0("glmstep",i),step("glm",i)

Error: unexpected symbol in:
"assign(paste0("glmstep",i),step("glm",i)
todosres"

Necesito hacer esto para extraer los coeficientes de todos los glm finales
seleccionados, en esta parte supongo que también tendré el mismo problema...

A continuación el script completo:

nes <- read.csv('C:/Aegmon/nes.csv', sep=';', header=T)

nreps=5

#selecting all rows with presences
index1=which(nes$ap==1)
np=length(index1)

#create object to holdall results of predicting the probability
#of the observation left out
todosres=matrix(0,nrow=nt,ncol=nreps)

for (i in 1:np){
   datos=nesting[-index1[i],]
   datosp=datos[datos$ap==1,]
   datosa=datos[datos$ap==0,]
   ndatosa=nrow(datosa)

   for (j in 1:nreps) {
     datosarand=datosa[sample(ndatosa,size=np,replace=FALSE),]
     newsamp=rbind(datosp,datosarand)
     asssign(paste0("glm",i),glm(ap~V1+V2+V3+V4+V5,data = datos,family =
binomial(link=logit)))
     save(list=paste0("glm",i),file=paste0("resultsglm/glm",i,".Rdata"))
     assign(paste0("glmstep",i),step("glm",i)
     todosres[,j]=predict.glm(object=glmtempstep,newdata=nes,type="response")
   }
}

coeffsglm=matrix(0,nrow=nt,ncol=9)
for (i in 1:nt){

coeffsglm[j,]=as.numeric(eval(parse(text=paste0("glmstep",i,"$coefficients"))))
}


Espero haberme explicado bien, muchas gracias

Un saludo

        [[alternative HTML version deleted]]

_______________________________________________
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es
.


_______________________________________________
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es

Reply via email to