J'essaye d'écrire une fonction qui crée des graphiques et qui a rencontré une erreur que je ne comprends pas. Voici un exemple simplifié.Comment écrire une fonction qui passe NULL à ggplot sans erreur esthétique
exemple Reproductible:
library (ggplot2)
# Sample data
xdata = 0:20
ydata = 20:40
dat <- data.frame(xdata, ydata)
# This works
line_p <- ggplot(dat, aes(x = xdata, y = ydata, group = NULL, color = NULL)) + geom_line()
line_p
J'attend ce qui suit à travailler, mais je reçois une erreur d'esthétique, mais dans ce cas les variables x et y sont de la même longueur. Les problèmes semblent avoir une valeur par défaut de NULL pour le groupe et la couleur. J'ai également essayé de passer explicitement NULL avec aes_group et aes_color en tant que variables de fonction, mais cela ne fonctionnait pas non plus.
# Using a function doesn't work:
# create function
line_function <- function(mydata = dat,
xinput = x,
yinput = y,
aes_group = NULL,
aes_color = NULL,
...) {
lineplot <- ggplot(dat, aes(x = xinput, y = yinput, group = aes_group, color = aes_color)) + geom_line()
}
# test the function
line_test_p <- line_function(
mydata = dat,
xinput = xdata,
yinput = ydata
)
line_test_p
test avec des entrées explicites
# test the function again with explicit NULL inputs
line_test2_p <- line_function(
mydata = dat,
xinput = xdata,
yinput = ydata,
aes_group = NULL,
aes_color = NULL
)
line_test2_p
est-il pas possible d'écrire une fonction générique où ggplot interprétera les valeurs NULL comme dans l'exemple qui fonctionne sans fonction, ou suis-je manque quelque chose d'autre ?
Merci!
Andrew, c'est ça, merci. Le changement le plus simple après avoir lu la documentation était de changer la ligne lineplot à: ** lineplot <- ggplot (mydata, aes_ (x = xinput, y = yinput, groupe = aes_group, color = aes_color)) + geom_line() ** I aussi devrait avoir utilisé ** mydata ** comme variable dans la fonction comme vous l'avez mentionné, pas ** dat ** – DaveM