2016-06-06 15 views
6

क्या आप उपयोगकर्ता इनपुट की प्रतीक्षा करते समय आर में गणना करने का कोई तरीका देखते हैं?आर: उपयोगकर्ता इनपुट के लिए प्रतीक्षा करते समय गणना गणना

मैं एक ऐसी स्क्रिप्ट लिख रहा हूं जो अलग-अलग प्रकार के भूखंडों को बनाता है जो उपयोगकर्ता इनपुट द्वारा परिभाषित किए जाते हैं, लेकिन पहले डेटा में लोड और संसाधित किया जाना चाहिए। लेकिन वास्तव में, उपयोगकर्ता परिभाषित करना शुरू कर सकता है कि प्रसंस्करण चल रहा है, जबकि वह पहले से ही चाहता है - यही वह है जो मैं करना चाहता हूं!

मुझे लगता है कि पैकेज आरडीएसएन मुझे आवश्यक कार्यक्षमता प्रदान कर सकता है, लेकिन मैं यह समझने में सक्षम नहीं था कि कैसे।

धन्यवाद!

उत्तर

0

आपने मुझे अधिक संदर्भ नहीं दिया, न ही पुन: उत्पन्न कोड, इसलिए मैं केवल एक साधारण उदाहरण प्रदान करूंगा। मैं आरडीएसएन पैकेज से परिचित नहीं हूं, इसलिए मैं एक समाधान प्रदान करने का उपयोग करूंगा जो मुझे पता है।

# create a function to prompt the user for some input 
readstuff = function(){ 
    stuff = readline(prompt = "Enter some stuff: ") 
    # Here is where you set the condition for the parameter 
    # Let's say you want it to be an integer 
    stuff = as.integer(stuff) 
    if(is.na(stuff)){ 
    return(readstuff()) 
    } else { 
    return(stuff) 
    } 
} 

parameter = readstuff() 

print(parameter) 
print(parameter + 10) 

यहां कुंजी "चलने" की बजाय स्क्रिप्ट को "स्रोत" करना है। आप RStudio के ऊपरी दाएं भाग पर "स्रोत" बटन पा सकते हैं। आप स्रोत के लिए source(yourscript) का भी उपयोग कर सकते हैं।

तो प्रत्येक पैरामीटर के लिए आप इनपुट के लिए उपयोगकर्ता को संकेत देना चाहते हैं, बस readstuff() पर कॉल करें। आप इसे अधिक सामान्य बनाने के लिए इसे थोड़ा छोटा कर सकते हैं। यदि वर्ग चरित्र है

# create a function to prompt the user for some input 
readstuff = function(promptMessage = "stuff", class = "integer"){ 
    stuff = readline(prompt = paste("Enter the", promptMessage, ": ")) 
    # Here is where you set the condition for the parameter 
    # Let's say you want it to be an integer 
    stuff = as(stuff, class) 
    if(is.na(stuff)){ 
    return(readstuff(promptMessage, class)) 
    } else { 
    return(stuff) 
    } 
} 

plotColor = readstuff("plot color", "character") 
size = readstuff("size parameter") 
xvarName = readstuff("x axis name", "character") 

df = data.frame(x = 1:100, y = 1:100) 

library(ggplot2) 
p = ggplot(df, aes(x = x, y = y, size = size, color = plotColor)) + 
    labs(x = xvarName) + geom_point() 
print(p) 

if(is.na(stuff)) बयान से काम नहीं चलेगा, लेकिन मुझे लगता है कि ठीक करने के लिए कैसे पर विस्तार में नहीं होगा, के बाद से इस सवाल का उपयोगकर्ता इनपुट के लिए प्रतीक्षा करने के तरीके के बारे में मुख्य रूप से है: उदाहरण के लिए। चेतावनी संदेशों को दबाने के तरीके भी हैं यदि उपयोगकर्ता ने इरादे से कुछ और दर्ज किया है, लेकिन फिर से, यहां इसके बारे में बात करने के लिए विषय बंद करें।

एक महत्वपूर्ण बात यह है कि आपको देखना है कि आर प्रिंट या प्लॉट करने के लिए आपको कुछ भी चाहिए, आपको इसे print() फ़ंक्शन के साथ लपेटने की आवश्यकता है। अन्यथा इसे सोर्सिंग प्रिंट नहीं करेगा और न ही कुछ साजिश करेगा। साथ ही, एक पैरामीटर में टाइप करते समय जो स्ट्रिंग या वर्ण होने का इरादा है, उद्धरण जोड़ें नहीं। उदाहरण के लिए, plotColor के लिए, प्रॉम्प्ट में "लाल" के बजाय लाल टाइप करें।

readline कोड के अधिकांश here द्वारा दर्शाया जाता है:

+0

खैर यह वास्तव में नहीं है कि मैं क्या जानना चाहता था। मैं इस तरह की स्थिति के बारे में सोच रहा था: 'लेबल <-readline ("मुझे बताएं कि आप क्या टिटल बनना चाहते हैं") #ask उपयोगकर्ता प्रश्न जिसके लिए बहुत सोचने की आवश्यकता है data.raw <-read.table (...) #read विशाल फ़ाइल डेटा। संरक्षित <-do.something (data.raw) #do समय प्रसंस्करण साजिश की मांग (डेटा.प्रोसेस्ड, मुख्य = लेबल) # पैरामीटर के साथ डेटा प्लॉट करें जो शुरुआत में निर्दिष्ट उपयोगकर्ता है 'तो मैं चाहता हूं कि पढ़ना और प्रसंस्करण तुरंत शुरू होता है ताकि उपयोगकर्ता द्वारा यह तय किया जा सके कि वह प्लॉट को लेबल करने के लिए क्या चाहता है। –

+0

@MichalSvoboda Well, क्या उपयोगकर्ता को अपना डेटा भी प्रदान करना है? या "विशाल फ़ाइल" पहले से ही शामिल है? – useR

+0

विचार यह है कि कार्यक्रम पहले सभी डेटा के साथ कुछ बड़ी फ़ाइल लोड करता है और फिर उपयोगकर्ता इसका कुछ सबसेट चुनता है जिससे वह एक रिपोर्ट तैयार करना चाहता है। फ़ाइल बहुत अच्छी तरह से संरचित नहीं है और इसके लिए बहुत सारी प्रोसेसिंग की आवश्यकता है, लेकिन हमारे पास यही है - मैंने सोचा कि उपयोगकर्ता प्रसंस्करण समाप्त होने से पहले सबसेट निर्दिष्ट करना शुरू कर सकता है। उपयोगकर्ता को फ़ाइल या कुछ भी पथ निर्दिष्ट करने की आवश्यकता नहीं है, क्योंकि फ़ाइल समान है, लेकिन डेटा अधिग्रहण प्रणाली द्वारा निरंतर अद्यतन किया जाता है। –

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