Torna zecche sono il modo standard di denotare un nome di variabile non standard in R. Quotes sono usati per indicare una stringa. Esempio:
`bad name` = 1
`bad name`
# [1] 1
Questo non funziona con le virgolette.
"bad name" = 1
"bad name"
# [1] "bad name"
In genere, non utilizzare questi nomi strani e non standard. Ma, se mai dovessi farlo, è il modo di farlo. È possibile fare praticamente qualsiasi cosa,
`really-bad^name+violating*all()/[kinds] <- of == rules&!|` = 1
# works just fine
, ma che non si vuol dire dovrebbe.
quando si tratta di ggplot
, se avete fatto
ggplot(mtcars, aes(x = wt, y = 1)) + geom_point()
che ci si aspetta che tutti i valori y sarebbe 1. E si sarebbe giusto!
Con una stringa tra virgolette è solo lo stesso:
ggplot(mtcars, aes(x = wt, y = "mpg")) + geom_point()
tranne che invece di un numerico come nel y = 1
caso di cui sopra, che hai dato un carattere - che è implicitamente convertito in un fattore (solo con un livello) per una scala y discreta (con un solo valore). Non importa se c'è una colonna denominata "mpg"
o meno, perché hai appena passato il valore aes()
.ggplot
non cerca una colonna denominata mpg
come se non cercasse una colonna denominata 1
nel primo esempio.
Con indietro zecche, si dà qualcosa ggplot
R riconosce come un nome oggetto, non solo un valore come 1
o "some string"
. Quindi ggplot
fa andare alla ricerca di una colonna con quel nome.
# both of these work
ggplot(mtcars, aes(x = wt, y = mpg)) + geom_point()
ggplot(mtcars, aes(x = wt, y = `mpg`)) + geom_point()
Mentre zecche indietro non lavorare, e le costanti di impostazione all'interno aes()
di solito funziona, nessuno di questi sono molto raccomandato. Il metodo preferito per impostare le costanti è impostare le costanti di set all'esterno di aes()
. Questo è l'unico modo per garantire che tutto funzioni bene in trame più complesse. Gli sfaccettature, in particolare, hanno spesso errori o non producono risultati attesi se si tenta di fare cose strane all'interno di aes()
(in particolare le trasformazioni).
# better than above, set a constant outside of `aes()`
# Here I set y as a constant which is a bit unusual
ggplot(mtcars, aes(x = wt)) + geom_point(y = 1)
# aesthetics that are more commonly set to constants are
# size, color, fill, etc.
Per i nomi delle colonne non-standard, aes_string()
funziona bene, e poi si aspetta le mappature estetiche da citare i nomi delle colonne. Questo è anche un buon modo per fare cose se stai scrivendo una funzione che crea ggplot e ha bisogno di prendere i nomi delle colonne come argomenti.
ggplot(mtcars, aes_string(x = "wt", y = "mpg")) + geom_point()
# or, in a variable
my_y_column = "mpg"
ggplot(mtcars, aes_string(x = "wt", y = my_y_column)) + geom_point()
più Un bell'esempio, cominciando a guardare sotto il cofano, grazie a @TheTime:
Alla fine, ggplot
necessità di valutare tutto ciò che verrà fatto con eval
. Si consideri quanto segue:
a <- 1
eval(parse(text="a"))
# [1] 1
eval(parse(text='"a"'))
# [1] "a"
eval(parse(text="`a`"))
# [1] 1
Non sono sicuro, ma questo può fornire qualche intuizione. Prova a guardare l'output di 'aes (x =" lon ", fill = state)' vs 'aes (x = lon, fill = state)' vs 'aes (x = \' lon \ ', fill = state)' Con le virgolette, si finisce con un personaggio, ma senza virgolette o apici inversi, si finisce con un simbolo. – Jota