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
Hola, Puedes hacer el mítico eval parse paste: for (i in seq(1,maximo)){ eval(parse(text=paste('df',i,'<-subset(df, subset = var',i,'>0)',sep=''))) } Saludos. El 12/12/2018 14:08, Manuel Mendoza 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 >
Hola, Manuel: Tienes que usar get: subset(df, subset=get(GT[1])>0) El 12/12/2018 a las 14:08, Manuel Mendoza 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 > > > > > > > > > > > > > > > > > > > > > > > > > > > . >-- 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
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 [[alternative HTML version deleted]]
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