2010-07-21 46 views
24

Tôi có một tập lệnh shell nhỏ (bash) chạy một tập lệnh R để tạo ra một âm mưu làm đầu ra. Tất cả mọi thứ hoạt động tốt nhưng immedietly sau khi cốt truyện được trả lại R quits. Có cách nào để giữ phiên R còn sống cho đến khi cửa sổ âm mưu đóng lại.Chạy Tập lệnh R với Lô

Tập lệnh trình bao.

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

Và tập lệnh R.

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

Cảm ơn bạn đã giúp đỡ!

Trả lời

26

Nếu bạn sử dụng lệnh Rscript (đó là phù hợp hơn cho mục đích này), bạn chạy nó như thế này:

#!/usr/bin/Rscript 

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

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

Hãy chắc chắn để đặt cho phép thực thi trên myscript.r, sau đó chạy như:

/path/to/myscript.r 

hoặc không có công việc:

Rscript /path/to/myscript.r 
+3

Điều này là không tốt, vì OP muốn tập lệnh chấm dứt sau khi ô được đóng, không phải sau khi nhấn một phím. – mbq

+0

Điều này hoạt động đủ tốt, tôi chỉ cần màn hình hiển thị ở trạng thái đủ dài để có thể xem cốt truyện sau khi tập lệnh shell hoàn tất. –

+3

Điều này không hiệu quả đối với tôi. Biểu đồ không bao giờ xuất hiện ... (trên cửa sổ) –

3

Đây không phải là giải pháp hoàn hảo, nhưng bạn có thể gọi locator() ngay sau lệnh cốt truyện.
Hoặc chỉ lưu cốt truyện vào pdf và sau đó gọi trình xem pdf lên đó bằng cách sử dụng system.

2

Một giải pháp sẽ được để viết cốt truyện ra pdf thay thế:

pdf(file="myplot.pdf") 

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

dev.off() 
0

Câu hỏi quan trọng hơn là tại sao bạn muốn R chạy sau khi tạo biểu đồ? Sử dụng nó hoặc trong chế độ tương tác hoặc trong chế độ hàng loạt ... Tôi không hiểu những gì bạn muốn thực hiện. Bên cạnh đó, hãy thử littler, nó nằm trong repos Ubuntu (repos vũ trụ, nếu tôi là chính xác), hoặc Rscript, do đó, viết lại kịch bản của bạn và đặt tên nó là myscript.r, và chắc chắn để đặt đúng đường dẫn trong dòng đầu tiên. Hãy thử whereis Rscript (thường là/usr/bin/Rscript). Quên về bash script. Bạn có thể vượt qua --vanilla và --slave đối số cho Rscript, nhưng tôi không thấy mục đích ... O_o

10

Bạn có thể thêm một vòng lặp để kiểm tra cho thiết bị đồ họa mỗi n giây:

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

Điều này sẽ ngủ cho đến khi bạn đóng cửa sổ lô.

+0

Điều này tốt hơn nhiều, kết thúc thậm chí cho phép người dùng thay đổi kích thước cửa sổ, v.v. – csl

Các vấn đề liên quan