आर

2015-03-06 6 views
10

में एईएस और एएस_स्ट्रिंग (ggplot2) के बीच अंतर क्या है सूचनाओं में लापता पृष्ठभूमि के साथ मुझे ggplot2 में aes और aes_string और दैनिक उपयोग के लिए इसके प्रभावों के बीच अंतर को समझने में कठिनाइयां हैं।आर

विवरण से (?aes_string) मैं समझने में सक्षम था कि describe how variables in the data are mapped to visual properties (aesthetics) of geom दोनों।

इसके अलावा यह कहा जाता है कि aes uses non-standard evaluation to capture the variable names. जबकि aes_stringregular evaluation का उपयोग करता है।

उदाहरण कोड से यह स्पष्ट है कि दोनों एक ही निर्गम (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 एक विधि न केवल एक कार्यों तर्क के मूल्यों कॉल करने के लिए, लेकिन यह भी कोड के रूप में वर्णन किया गया है कि Hadley Wickham in his book Advanced R द्वारा उन्हें उत्पादन किया।

मुझे लगता है कि regular evaluation विपक्ष में केवल फ़ंक्शन से मूल्यों को कॉल करता है, लेकिन मुझे इस धारणा की पुष्टि करने के लिए कोई स्रोत नहीं मिला। इसके अलावा यह मेरे लिए अस्पष्ट है कि जब मैं पैकेज का उपयोग करता हूं तो ये दोनों अलग-अलग होते हैं और यह मेरे लिए प्रासंगिक क्यों होना चाहिए।

inside-R website पर यह बताया गया है कि 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.

लेकिन उस अर्थ में यह मेरे लिए स्पष्ट नहीं है कारण है कि मैं कभी aes का उपयोग करना चाहिए और जब भी ggplot2 का उपयोग कर aes_string के लिए हमेशा का विकल्प नहीं चुन ... इस संदर्भ में यह मुझे मदद मिलेगी उन अवधारणाओं पर कुछ स्पष्टीकरण और दैनिक उपयोग के लिए एक व्यावहारिक संकेत खोजने के लिए।

उत्तर

12

aes आपको कुछ टाइपिंग बचाता है क्योंकि आपको उद्धरण की आवश्यकता नहीं है। बस इतना ही। आप हमेशा aes_string का उपयोग करने के लिए स्वतंत्र हैं। यदि आप परिवर्तनीय नाम प्रोग्रामेटिक रूप से पास करना चाहते हैं तो आपको aes_string का उपयोग करना चाहिए।

आंतरिक रूप से aes गैर-मानक मूल्यांकन के लिए match.call का उपयोग करता है।

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

तुलना के लिए:

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

प्रतीकों बाद में मूल्यांकन किया जाता है यहाँ उदाहरण के लिए एक सरल उदाहरण है।

aes_stringparse का उपयोग करता है एक ही प्राप्त करने के लिए:

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