[R-es] Subset dentro de un for

Marcelino De La Cruz Rot m@rcelino@del@cruz @ending from urjc@e@
Mie Dic 12 18:46:40 CET 2018



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



Más información sobre la lista de distribución R-help-es