Frage Was ist der Unterschied zwischen aes und aes_string (ggplot2) in R?


Mit fehlendem Hintergrund in der Informatik habe ich Schwierigkeiten, die Unterschiede zwischen zu verstehen aes und aes_string in ggplot2 und seine Auswirkungen auf den täglichen Gebrauch.

Aus der Beschreibung (?aes_string) Ich konnte beides verstehen describe how variables in the data are mapped to visual properties (aesthetics) of geom.

Darüber hinaus heißt es aes uses non-standard evaluation to capture the variable names. wohingegen aes_string Verwendet regular evaluation.

Aus dem Beispielcode ist ersichtlich, dass beide die gleiche Ausgabe erzeugen (a list of unevaluated expressions):

> aes_string(x = "mpg", y = "wt")
List of 2
 $ x: symbol mpg
 $ y: symbol wt
> aes(x = mpg, y = wt)
List of 2
 $ x: symbol mpg
 $ y: symbol wt

Non-standard evaluation wird beschrieben von Hadley Wickham in seinem Buch Fortgeschrittene R als eine Methode, um nicht nur die Werte eines Funktionsarguments, sondern auch den Code, der sie erzeugt hat, aufzurufen.

Ich würde das annehmen regular evaluation im Gegensatz ruft nur die Werte von der Funktion, aber ich habe keine Quelle gefunden, um diese Annahme zu bestätigen. Außerdem ist mir unklar, wie sich diese beiden unterscheiden und warum dies für mich relevant sein sollte, wenn ich das Paket nutze.

Auf der Inside-R Webseite es wird das erwähnt aes_string is particularly useful when writing functions that create plots because you can use strings to define the aesthetic mappings, rather than having to mess around with expressions.

Aber in diesem Sinne ist es mir unklar, warum ich jemals verwenden sollte aes und nicht immer dafür entscheiden aes_string bei jeder Verwendung ggplot2... In diesem Sinne würde es mir helfen, einige Erklärungen zu diesen Konzepten und einen praktischen Hinweis für den täglichen Gebrauch zu finden.


11
2018-03-06 11:11


Ursprung


Antworten:


aes erspart Ihnen einige Eingaben, da Sie die Anführungszeichen nicht benötigen. Das ist alles. Sie sind natürlich frei, immer zu verwenden aes_string. Du solltest benutzen aes_string Wenn Sie die Variablennamen programmgesteuert übergeben möchten.

Im Inneren aes Verwendet match.call für die Nicht-Standard-Bewertung. Hier ist ein einfaches Beispiel zur Veranschaulichung:

fun <- function(x, y) as.list(match.call())
str(fun(a, b))
#List of 3
# $  : symbol fun
# $ x: symbol a
# $ y: symbol b

Zum Vergleich:

library(ggplot2)
str(aes(x = a, y = b))
#List of 2
# $ x: symbol a
# $ y: symbol b

Die Symbole werden zu einem späteren Zeitpunkt ausgewertet.

aes_string Verwendet parse um dasselbe zu erreichen:

str(aes_string(x = "a", y = "b"))
#List of 2
# $ x: symbol a
# $ y: symbol b

13
2018-03-06 11:28