2010-07-21 14 views
24

के साथ आर स्क्रिप्ट चलाना मेरे पास एक छोटी शेल स्क्रिप्ट (बैश) है जो एक आर स्क्रिप्ट चलाती है जो आउटपुट के रूप में साजिश उत्पन्न करती है। सबकुछ ठीक काम करता है लेकिन साजिश रेंडर के बाद immedietly r quits। साजिश खिड़की बंद होने तक आर सत्र को जीवित रखने का कोई तरीका है।प्लॉट्स

शैल स्क्रिप्ट।

#!/bin/bash 
R --slave --vanilla < myscript.r 

और आर स्क्रिप्ट।

daq = read.table(file('mydata.dat')) 
X11() 
pairs(daq) 
//R Completes this and then exits immediately. 

किसी भी मदद के लिए अग्रिम धन्यवाद!

उत्तर

26

आप Rscript आदेश का उपयोग करें (जो बेहतर इस उद्देश्य के लिए अनुकूल है), तो आप इसे इस तरह चलाएँ:

#!/usr/bin/Rscript 

daq = read.table(file('mydata.dat')) 
X11() 
pairs(daq) 

message("Press Return To Continue") 
invisible(readLines("stdin", n=1)) 

myscript.r पर अमल अनुमति सेट करना सुनिश्चित करें, तो जैसे चलाएँ:

/path/to/myscript.r 

या कुटिया के बिना:

Rscript /path/to/myscript.r 
+3

यह अच्छा नहीं है, क्योंकि ओपी प्लॉट बंद होने के बाद स्क्रिप्ट को समाप्त करना चाहता था, एक कुंजी दबाए जाने के बाद नहीं। – mbq

+0

यह काफी अच्छी तरह से काम करता है, मुझे केवल लंबे समय तक खुला रहने के लिए डिस्प्ले की आवश्यकता है ताकि शैल स्क्रिप्ट पूर्ण होने के बाद साजिश देखी जा सके। –

+3

यह मेरे लिए काम नहीं करता है। एक ग्राफ कभी प्रकट नहीं होता है ... (विंडोज़ पर) –

3

यह एक सही समाधान नहीं है, लेकिन आप प्लॉट कमांड के ठीक बाद locator() पर कॉल कर सकते हैं।
या सिर्फ साजिश को पीडीएफ में सहेजें और फिर system का उपयोग करके पीडीएफ दर्शक को आमंत्रित करें।

2

एक समाधान करने के लिए साजिश को लिखने के लिए होगा इसके बजाय पीडीएफ:

pdf(file="myplot.pdf") 

##your plot command here 
plot(. . .) 

dev.off() 
0

अधिक महत्वपूर्ण सवाल यह है कि आप ग्राफ निर्माण के बाद आर को चलाने के लिए क्यों चाहते हैं? इसे या तो इंटरैक्टिव मोड में या बैच मोड में उपयोग करें ... मुझे समझ में नहीं आता कि आप क्या हासिल करना चाहते हैं। इसके अलावा, littler आज़माएं, यह उबंटू रेपोस (ब्रह्मांड रिपोज़, यदि मैं सही हूं), या Rscript में स्थित है, तो अपनी स्क्रिप्ट को फिर से लिखें और इसे myscript.r नाम दें, और पहली पंक्ति में सही पथ डालना सुनिश्चित करें। whereis Rscript (आमतौर पर/usr/bin/percript) आज़माएं। बैश स्क्रिप्ट के बारे में भूल जाओ। आप Rscript को --vanilla और --slave तर्क पारित कर सकते हैं, लेकिन मैं उद्देश्य नहीं दिख रहा है ... O_o

10

आप एक पाश है कि ग्राफिकल उपकरण प्रत्येक n सेकंड के लिए जाँच करता है जोड़ सकते हैं:

while (!is.null(dev.list())) Sys.sleep(1) 

यह तब तक सो जाएगा जब तक आप प्लॉट विंडो बंद नहीं करते।

+0

यह बहुत बेहतर है, अंत उपयोगकर्ता को खिड़की का आकार बदलने देता है और इसी तरह। – csl

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