[R-es] Subset dentro de un for

Manuel Mendoza mmendoz@ @ending from mncn@c@ic@e@
Mie Dic 12 23:12:33 CET 2018


Si, es lo primero que pensé, pero lo he comprobado y las 20 utilizadas  
para hacer el gradiente son numéricas. De hecho, si las pongo con su  
nombre, en vez de  get(GT[i]), me hace bien el mapa.


Quoting Marcelino De La Cruz Rot <marcelino.delacruz using urjc.es>:

> Ese error suena a que alguna de las variables fuese no numérica (factor
> o character).
>
>
> El 12/12/2018 a las 19:32, Manuel Mendoza escribió:
>>
>> 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 using 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 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
>>
>>
>
> --
> 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



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