2015-03-06 21 views
10

Con lo sfondo mancante in informatica, ho difficoltà a comprendere le differenze tra aes e aes_string in ggplot2 e le sue implicazioni per l'uso quotidiano.Qual è la differenza tra aes e aes_string (ggplot2) in R

Dalla descrizione (?aes_string) sono stato in grado di capire che sia describe how variables in the data are mapped to visual properties (aesthetics) of geom.

Inoltre si dice che aes uses non-standard evaluation to capture the variable names. mentre aes_string utilizza regular evaluation.

Da esempio di codice è chiaro che entrambe producono la stessa uscita (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 è descritto da Hadley Wickham in his book Advanced R come metodo per chiamare non solo i valori di un argomento funzioni ma anche il codice che li ha prodotti

Suppongo che l'opposizione regular evaluation invochi solo i valori dalla funzione, ma non ho trovato una fonte per confermare questa ipotesi. Inoltre non mi è chiaro come questi due differiscano e perché questo dovrebbe essere rilevante per me quando uso il pacchetto.

Sul inside-R website si dice che 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.

Ma in questo senso non è chiaro per me perché dovrei mai usare aes e non sempre optare per aes_string ogni volta usando ggplot2 ... In questo senso mi avrebbe aiutato per trovare alcuni chiarimenti su questi concetti e un suggerimento pratico per l'uso quotidiano.

risposta

12

aes consente di risparmiare un po 'di digitazione in quanto non sono necessarie le virgolette. Questo è tutto. Ovviamente sei libero di usare sempre aes_string. È necessario utilizzare aes_string se si desidera passare i nomi di variabile a livello di programmazione.

Internamente aes utilizza match.call per la valutazione non standard. Ecco un semplice esempio illustrativo:

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

Per confronto:

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

I simboli sono valutate in una fase successiva.

aes_string utilizza parse per ottenere lo stesso:

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