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
> .
>