2013-04-30 4 views
10

मुझे ggplot2 को किसी अन्य फ़ंक्शन में लपेटने की आवश्यकता है, और वे वैरिएबल को उसी तरीके से पार्स करने में सक्षम होना चाहते हैं, जिसे कोई भी सही दिशा में चला सकता है।एक रैपर में ggplot को तर्क देने के लिए

उदाहरण के लिए कहें, हम नीचे MWE पर विचार करते हैं।

#Load Required libraries. 
library(ggplot2) 

##My Wrapper Function. 
mywrapper <- function(data,xcol,ycol,colorVar){ 
    writeLines("This is my wrapper") 
    plot <- ggplot(data=data,aes(x=xcol,y=ycol,color=colorVar)) + geom_point() 
    print(plot) 
    return(plot) 
} 

डमी डाटा:

##Demo Data 
myData <- data.frame(x=0,y=0,c="Color Series") 

मौजूदा प्रयोग जो परेशानी के बिना निष्पादित करता है:

##Example of Original Function Usage, which executes as expected 
plot <- ggplot(data=myData,aes(x=x,y=y,color=c)) + geom_point() 
print(plot) 

उद्देश्य उपयोग वाक्य रचना:

##Example of Intended Usage, which Throws Error ----- "object 'xcol' not found" 
mywrapper(data=myData,xcol=x,ycol=y,colorVar=c) 

उपर्युक्त ggplot2 पैकेज द्वारा 'मूल' उपयोग का एक उदाहरण देता है, और, मैं इसे किसी अन्य फ़ंक्शन में कैसे लपेटना चाहता हूं। हालांकि, रैपर एक त्रुटि फेंकता है।

मुझे यकीन है कि यह कई अन्य अनुप्रयोगों के लिए लागू होता हूँ, और यह शायद एक हज़ार बार उत्तर दिया गया है, फिर भी, मुझे यकीन है कि क्या इस विषय आर

उत्तर

9
समस्या यहाँ

भीतर 'कहा जाता है' है नहीं कर रहा हूँ कि ggplot है डेटा ऑब्जेक्ट में नाम xcol के लिए दिखता है। मैं aes_string का उपयोग करने और स्तंभ नाम पारित करने के लिए स्विच करने के लिए सिफारिश करेंगे आप एक स्ट्रिंग, जैसे का उपयोग कर मैप करना चाहते हैं:

mywrapper(data = "myData", xcol = "x", ycol = "y", colorVar = "c") 

और उसके अनुसार अपनी आवरण को संशोधित:

mywrapper <- function(data,xcol,ycol,colorVar){ 
    writeLines("This is my wrapper") 
    plot <- ggplot(data=data, aes_string(x = xcol, y = ycol, color = colorVar)) + geom_point() 
    print(plot) 
    return(plot) 
} 

कुछ टिप्पणी:

  1. व्यक्तिगत वरीयता, मैं आसपास के कई स्थानों का उपयोग करता हूं उदाहरण के लिए x = 1, मेरे लिए यह पठनीयता में काफी सुधार करता है। रिक्त स्थान के बिना कोड एक बड़े ब्लॉक की तरह दिखता है।
  2. यदि आप फ़ंक्शन के बाहर साजिश वापस करते हैं, तो मैं इसे फ़ंक्शन के अंदर प्रिंट नहीं करता, बल्कि फ़ंक्शन के बाहर।
+0

धन्यवाद, पता नहीं था कि वहाँ aes_string विकल्प था, लेकिन 'name' को पार करने का कोई तरीका नहीं है, मेरा मतलब है, ggplot2 फ़ंक्शन कैसे कहता है कि तर्क क्या है। –

+0

ऑब्जेक्ट का नाम प्राप्त करने के तरीके हैं, ggplot2 'एईएस' में हुड के तहत उपयोग करता है, लेकिन इस तरह के तर्कों को पारित करने के लिए, 'aes_string' बहुत आसान है। –

+0

हाय, यह बहुत उपयोगी उत्तर है। मैं एक हिस्टोग्राम के लिए एक रैपर विकसित करने के लिए इस समाधान का उपयोग कर रहा हूँ। हालांकि, मेरे कोड में मेरे पास मध्य रेखा 'geom_vline (एईएस (xintercept = mean (histogramVariable)), रंग =' लाल '' उत्पन्न करने के लिए कोड है। 'हिस्टोग्राम वैरिएबल' को 'डेटा $ हिस्टोग्राम' के रूप में कितनी चतुरता से पास किया जाता है? – Konrad

संबंधित मुद्दे