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]]
¿Es posible que lo que busques sea la función get()? Un saludo Isidro Hidalgo Arellano Observatorio Regional de Empleo Consejería de Empleo y Economía http://www.jccm.es> -----Mensaje original----- > De: R-help-es [mailto:r-help-es-bounces en r-project.org] En nombre de Isa > García Barón > Enviado el: miércoles, 04 de febrero de 2015 11:08 > Para: r-help-es en r-project.org > Asunto: [R-es] Función assign y paste0 en un loop > > 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,"$coefficie > nts")))) > } > > > Espero haberme explicado bien, muchas gracias > > Un saludo > > [[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
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 en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > . >