Gracias a los tres, Raúl, Marcelino y Carlos. Lo del "get" de Marcelino me da la respuesta a lo que yo exactamente preguntaba, y funciona, pero ahora tengo problemas con el for, por lo que probablemente recurra al eval parse de Raúl o Carlos, que ya tienen el for. Aún así, lo intento 1º con el get. Con subset(df, subset=get(GT[i])>0) el problema es que en el for hago un ggplot cuyo color es = a la variable que condiciona el subset, y no funciona poniendo GT[i] (como se ve abajo). Pretendo que me haga 20 mapas, cada uno de acuerdo a una de las 20 variables de GT. GT<- c("var1","var2", ? "var20") for(i in GT) { df2<-subset(df1, subset=get(GT[i])>0) windows();print(ggplot(legend=FALSE)+geom_path( data=world, aes(x=long, y=lat,group=group))+ theme(panel.background=element_blank())+theme(panel.grid.major = element_blank())+ theme(panel.grid.minor = element_blank())+theme(axis.text.x=element_blank(),axis.text.y=element_blank())+ theme(axis.ticks = element_blank())+xlab("") + ylab("")+ geom_point(data=df2,aes(x=lon,y=lat, color= GT[i],size=2) + scale_colour_gradient(low=("white"),high=("red"),guide="colourbar",limits=c(0,max))+ geom_path(data=map_data('world'), aes(x=long, y=lat,group=group))+ labs(title = paste("5026 Minimum number of IFd species to go extinct")))) } Quoting Carlos Ortega <cof en qualityexcellence.es>:> Esta es una forma... > >> for(i in c('Ozone', 'Solar.R')) { > + print(i) > + sub_data <- subset(airquality, eval(parse(text=i)) < 100) > + res_ult <- mean(sub_data$Temp, na.rm = TRUE) > + print(res_ult) > + } > [1] "Ozone" > [1] 77.34862 > [1] "Solar.R" > [1] 71.85294 > > Y otra forma à la dplyr...: > >> library(rlang) >> for(i in c('Ozone', 'Solar.R')) { > + print(i) > + res_ult <- airquality %>% > + filter(!!sym(i) < 100) %>% > + summarize(Media = mean(Temp, na.rm = TRUE)) > + print(res_ult) > + } > [1] "Ozone" > Media > 1 77.34862 > [1] "Solar.R" > Media > 1 71.85294 > > Saludos, > Carlos Ortega > www.qualityexcellence.es > > > > El mié., 12 dic. 2018 a las 14:09, Manuel Mendoza (<mmendoza en mncn.csic.es>) > escribió: > >> Muy buenas. Quiero hacer un loop en el que en cada iteración se hace >> un subset con el que se queda con las muestras para la que cierta >> variable es positiva. >> >> Si hago esto, sale bien: >> >> df2<-subset(df, subset = var1>0) >> >> >> Pero he probado así (y de no sé cuantas formas más), antes de hacer el >> for, y no sale: >> >> GT<- c("var1","var2", ? ) >> >> df2<-subset(df, subset=(GT[1]>0)) >> >> Gracias, >> Manuel >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> . >> >> -- >> Dr Manuel Mendoza >> Department of Biogeography and Global Change >> National Museum of Natural Science (MNCN) >> Spanish Scientific Council (CSIC) >> C/ Serrano 115bis, 28006 MADRID >> Spain >> >> _______________________________________________ >> R-help-es mailing list >> R-help-es en r-project.org >> https://stat.ethz.ch/mailman/listinfo/r-help-es >> > > > -- > Saludos, > Carlos Ortega > www.qualityexcellence.es-- Dr Manuel Mendoza Department of Biogeography and Global Change National Museum of Natural Science (MNCN) Spanish Scientific Council (CSIC) C/ Serrano 115bis, 28006 MADRID Spain
Ten cuidado, porque empiezas el for como: for(i in GT) y luego el color del aes lo defines como: color= GT[i] Lo que, por ejemplo para el primer caso, se traduciría en GT["var1"], que, a no ser que GT tenga names , debería dar un error. Yo creo que quieres decir for(i in 1:length(GT)) ... color=get(GT[i]) El 12/12/2018 a las 18:21, Manuel Mendoza escribió:> > Gracias a los tres, Raúl, Marcelino y Carlos. > > Lo del "get" de Marcelino me da la respuesta a lo que yo exactamente > preguntaba, y funciona, pero ahora tengo problemas con el for, por lo > que probablemente recurra al eval parse de Raúl o Carlos, que ya > tienen el for. Aún así, lo intento 1º con el get. > > Con subset(df, subset=get(GT[i])>0) el problema es que en el for hago > un ggplot cuyo color es = a la variable que condiciona el subset, y no > funciona poniendo GT[i] (como se ve abajo). Pretendo que me haga 20 > mapas, cada uno de acuerdo a una de las 20 variables de GT. > > GT<- c("var1","var2", ? "var20") > > for(i in GT) { > > df2<-subset(df1, subset=get(GT[i])>0) > > windows();print(ggplot(legend=FALSE)+geom_path( data=world, > aes(x=long, y=lat,group=group))+ > theme(panel.background=element_blank())+theme(panel.grid.major = > element_blank())+ > theme(panel.grid.minor = > element_blank())+theme(axis.text.x=element_blank(),axis.text.y=element_blank())+ > theme(axis.ticks = element_blank())+xlab("") + ylab("")+ > geom_point(data=df2,aes(x=lon,y=lat, > > color= GT[i],size=2) + > > scale_colour_gradient(low=("white"),high=("red"),guide="colourbar",limits=c(0,max))+ > geom_path(data=map_data('world'), aes(x=long, > y=lat,group=group))+ > labs(title = paste("5026 Minimum number of IFd species to go > extinct")))) > > } > > > > > > > > > Quoting Carlos Ortega <cof en qualityexcellence.es>: > >> Esta es una forma... >> >>> for(i in c('Ozone', 'Solar.R')) { >> + print(i) >> + sub_data <- subset(airquality, eval(parse(text=i)) < 100) >> + res_ult <- mean(sub_data$Temp, na.rm = TRUE) >> + print(res_ult) >> + } >> [1] "Ozone" >> [1] 77.34862 >> [1] "Solar.R" >> [1] 71.85294 >> >> Y otra forma à la dplyr...: >> >>> library(rlang) >>> for(i in c('Ozone', 'Solar.R')) { >> + print(i) >> + res_ult <- airquality %>% >> + filter(!!sym(i) < 100) %>% >> + summarize(Media = mean(Temp, na.rm = TRUE)) >> + print(res_ult) >> + } >> [1] "Ozone" >> Media >> 1 77.34862 >> [1] "Solar.R" >> Media >> 1 71.85294 >> >> Saludos, >> Carlos Ortega >> www.qualityexcellence.es >> >> >> >> El mié., 12 dic. 2018 a las 14:09, Manuel Mendoza >> (<mmendoza en mncn.csic.es>) >> escribió: >> >>> Muy buenas. Quiero hacer un loop en el que en cada iteración se hace >>> un subset con el que se queda con las muestras para la que cierta >>> variable es positiva. >>> >>> Si hago esto, sale bien: >>> >>> df2<-subset(df, subset = var1>0) >>> >>> >>> Pero he probado así (y de no sé cuantas formas más), antes de hacer el >>> for, y no sale: >>> >>> GT<- c("var1","var2", ? ) >>> >>> df2<-subset(df, subset=(GT[1]>0)) >>> >>> Gracias, >>> Manuel >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> . >>> >>> -- >>> Dr Manuel Mendoza >>> Department of Biogeography and Global Change >>> National Museum of Natural Science (MNCN) >>> Spanish Scientific Council (CSIC) >>> C/ Serrano 115bis, 28006 MADRID >>> Spain >>> >>> _______________________________________________ >>> R-help-es mailing list >>> R-help-es en r-project.org >>> https://stat.ethz.ch/mailman/listinfo/r-help-es >>> >> >> >> -- >> Saludos, >> Carlos Ortega >> www.qualityexcellence.es > >-- Marcelino de la Cruz Rot Depto. de Biología y Geología Física y Química Inorgánica Universidad Rey Juan Carlos Móstoles España
Gracias Marcelino. Si, (i in 1:length(GT)), lo he utilizado mil veces, pero se me sigue olvidando de una vez a otra. Lo iba a mirar, pero me centré primero en que me hiciera bien el mapa. He probado el for y me da este error: Error in aes(x = lon, y = lat, color = get(GT[i]), size = 2) + scale_colour_gradient(low = ("white"), : non-numeric argument to binary operator Quoting Marcelino De La Cruz Rot <marcelino.delacruz en urjc.es>:> Ten cuidado, porque empiezas el for como: > > for(i in GT) > > y luego el color del aes lo defines como: > > color= GT[i] > > Lo que, por ejemplo para el primer caso, se traduciría en GT["var1"], > que, a no ser que GT tenga names , debería dar un error. > > Yo creo que quieres decir > > for(i in 1:length(GT)) > > ... > color=get(GT[i]) > > > El 12/12/2018 a las 18:21, Manuel Mendoza escribió: >> >> Gracias a los tres, Raúl, Marcelino y Carlos. >> >> Lo del "get" de Marcelino me da la respuesta a lo que yo exactamente >> preguntaba, y funciona, pero ahora tengo problemas con el for, por lo >> que probablemente recurra al eval parse de Raúl o Carlos, que ya >> tienen el for. Aún así, lo intento 1º con el get. >> >> Con subset(df, subset=get(GT[i])>0) el problema es que en el for hago >> un ggplot cuyo color es = a la variable que condiciona el subset, y no >> funciona poniendo GT[i] (como se ve abajo). Pretendo que me haga 20 >> mapas, cada uno de acuerdo a una de las 20 variables de GT. >> >> GT<- c("var1","var2", ? "var20") >> >> for(i in GT) { >> >> df2<-subset(df1, subset=get(GT[i])>0) >> >> windows();print(ggplot(legend=FALSE)+geom_path( data=world, >> aes(x=long, y=lat,group=group))+ >> theme(panel.background=element_blank())+theme(panel.grid.major >> element_blank())+ >> theme(panel.grid.minor >> element_blank())+theme(axis.text.x=element_blank(),axis.text.y=element_blank())+ >> theme(axis.ticks = element_blank())+xlab("") + ylab("")+ >> geom_point(data=df2,aes(x=lon,y=lat, >> >> color= GT[i],size=2) + >> >> scale_colour_gradient(low=("white"),high=("red"),guide="colourbar",limits=c(0,max))+ >> geom_path(data=map_data('world'), aes(x=long, >> y=lat,group=group))+ >> labs(title = paste("5026 Minimum number of IFd species to go >> extinct")))) >> >> } >> >> >> >> >> >> >> >> >> Quoting Carlos Ortega <cof en qualityexcellence.es>: >> >>> Esta es una forma... >>> >>>> for(i in c('Ozone', 'Solar.R')) { >>> + print(i) >>> + sub_data <- subset(airquality, eval(parse(text=i)) < 100) >>> + res_ult <- mean(sub_data$Temp, na.rm = TRUE) >>> + print(res_ult) >>> + } >>> [1] "Ozone" >>> [1] 77.34862 >>> [1] "Solar.R" >>> [1] 71.85294 >>> >>> Y otra forma à la dplyr...: >>> >>>> library(rlang) >>>> for(i in c('Ozone', 'Solar.R')) { >>> + print(i) >>> + res_ult <- airquality %>% >>> + filter(!!sym(i) < 100) %>% >>> + summarize(Media = mean(Temp, na.rm = TRUE)) >>> + print(res_ult) >>> + } >>> [1] "Ozone" >>> Media >>> 1 77.34862 >>> [1] "Solar.R" >>> Media >>> 1 71.85294 >>> >>> Saludos, >>> Carlos Ortega >>> www.qualityexcellence.es >>> >>> >>> >>> El mié., 12 dic. 2018 a las 14:09, Manuel Mendoza >>> (<mmendoza en mncn.csic.es>) >>> escribió: >>> >>>> Muy buenas. Quiero hacer un loop en el que en cada iteración se hace >>>> un subset con el que se queda con las muestras para la que cierta >>>> variable es positiva. >>>> >>>> Si hago esto, sale bien: >>>> >>>> df2<-subset(df, subset = var1>0) >>>> >>>> >>>> Pero he probado así (y de no sé cuantas formas más), antes de hacer el >>>> for, y no sale: >>>> >>>> GT<- c("var1","var2", ? ) >>>> >>>> df2<-subset(df, subset=(GT[1]>0)) >>>> >>>> Gracias, >>>> Manuel >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> . >>>> >>>> -- >>>> Dr Manuel Mendoza >>>> Department of Biogeography and Global Change >>>> National Museum of Natural Science (MNCN) >>>> Spanish Scientific Council (CSIC) >>>> C/ Serrano 115bis, 28006 MADRID >>>> Spain >>>> >>>> _______________________________________________ >>>> R-help-es mailing list >>>> R-help-es en r-project.org >>>> https://stat.ethz.ch/mailman/listinfo/r-help-es >>>> >>> >>> >>> -- >>> Saludos, >>> Carlos Ortega >>> www.qualityexcellence.es >> >> > > -- > Marcelino de la Cruz Rot > Depto. de Biología y Geología > Física y Química Inorgánica > Universidad Rey Juan Carlos > Móstoles España-- Dr Manuel Mendoza Department of Biogeography and Global Change National Museum of Natural Science (MNCN) Spanish Scientific Council (CSIC) C/ Serrano 115bis, 28006 MADRID Spain