C'est la première fois que je veux faire une fonction mais avec du code dplyr dedans (%>%) mais j'ai un souci avec l'argument de la fonction, s'il vous plait.
Pour faire simple, j'ai des données d'observations d'oiseaux : 1 ligne = 1 observation avec une colonne "observé/pas_observé" et une colonne "superficie_essence". Je veux savoir si avec l'augmentation de la superficie il y a une augmentation de la proportion "d'observé" dans chaque catégorie de surface. Pour cela j'ai fait le code :
Code : Tout sélectionner
test_tab_ggplot <- data_observation %>% select(superficie_essence , obs ) %>% mutate(Class_prop = factor(case_when(
superficie_essence == 0 ~ "[0]",
superficie_essence > 0.0001 & superficie_essence < 10.0001 ~ "]0-10]",
superficie_essence > 10.0001 & superficie_essence < 25.0001 ~ "]10-25]",
superficie_essence > 25.0001 & superficie_essence < 50.0001 ~ "]25-50]",
superficie_essence > 50.0001 & superficie_essence < 75.0001 ~ "]50-75]",
superficie_essence > 75.0001 ~ "]75- 100]",
)))
test_tab_ggplotII <- ddply(test_tab_ggplot,.(Class_prop),
function(x) with(x,
data.frame(100*round(table(obs )/length(obs ),3))))
ggplot(data=test_tab_ggplotII, aes(x=Class_prop, y=Freq, fill=obs )) +
geom_bar(stat="identity")+
scale_fill_brewer(palette="Greens")+
theme_minimal()
Cela me donne exactement ce que je veux, cependant, j'ai pleins d'essences à tester et donc j'aimerais faire une fonction.
Code : Tout sélectionner
plot_forest <- function(data_observation, superficie_essence){
superficie_essence <- enquo(superficie_essence)
print(superficie_essence)
test_tab_ggplot <- data_observation %>% select(!!superficie_essence , obs ) %>% mutate(Class_prop = factor(case_when(
!!col == 0 ~ "[0]",
!!superficie_essence > 0.0001 & !!superficie_essence < 10.0001 ~ "]0-10]",
!!superficie_essence > 10.0001 & !!superficie_essence < 25.0001 ~ "]10-25]",
!!superficie_essence > 25.0001 & !!superficie_essence < 50.0001 ~ "]25-50]",
!!superficie_essence > 50.0001 & !!superficie_essence < 75.0001 ~ "]50-75]",
!!superficie_essence > 75.0001 ~ "]75- 100]",
)))
test_tab_ggplotII <- ddply(test_tab_ggplot,.(Class_prop),
function(x) with(x,
data.frame(100*round(table(obs )/length(obs ),3))))
out <- ggplot(data=test_tab_ggplotII, aes(x=Class_prop, y=Freq, fill=obs )) +
geom_bar(stat="identity")+
scale_fill_brewer(palette="Greens")+
theme_minimal()
return(out)
}
plot_forest(data_observation, superficie_essence)
Et la ça coince, je veux qu'il comprenne l'expression "Pc_foret" dans mon cas de figure. Après quelques recherches sur internet j'ai cru que simplement mettre
Code : Tout sélectionner
superficie_essence <- enquo(superficie_essence)
Code : Tout sélectionner
!!superficie_essence
Code : Tout sélectionner
Erreur : Base operators are not defined for quosures.
Do you need to unquote the quosure?
# Bad:
myquosure == rhs
# Good:
!!myquosure == rhs
Auriez-vous une idée s'il vous plait ?
Merci à tous !
Données repro :
Code : Tout sélectionner
superficie_essence <- c(0,0,0,0,10,10,30,30,30,45,65,65,65,80,80,80,90,95,100)
obs <- as.factor(c("oui", "non", "non", "non", "oui", "non", "non", "non", "non", "oui", "oui", "oui", "oui", "oui", "oui", "non", "oui", "oui", "oui"))
data_observation <- cbind.data.frame(superficie_essence, obs)
library(dplyr)
library(plyr)