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