2011-11-17 23 views
7

Tôi có tập lệnh R truy vấn cơ sở dữ liệu, chạy một số phân tích, vẽ một vài biểu đồ dựa trên ngày hệ thống hiện tại.Rời khỏi các ô được tạo RScript trên màn hình cho đến khi tương tác với người dùng

Tôi muốn tập lệnh này chạy hàng ngày khi khởi động, tôi nghĩ tôi có thể thực hiện điều này khá đơn giản bằng cách sử dụng phím tắt đến rscript.exe với các tham số cần thiết.

Tính năng này hoạt động tốt, tuy nhiên tập lệnh sẽ thoát sau khi chạy, không hữu ích khi xem biểu đồ.

Tôi đang sử dụng XP và win7.

Có cách nào dễ dàng để giữ đầu ra từ tập lệnh trên màn hình không? Tôi đã thử kết hợp quét vào kịch bản, nhưng nó không dừng lại.

Tôi biết tôi chỉ có thể mở rgui, và chạy một dòng mã, nhưng kế hoạch này là để triển khai này vào máy tính của một đồng nghiệp người là hoàn toàn xa lạ với R.

+0

Có thể xuất ra tệp đồ họa (ví dụ: PNG) và bật lên trên màn hình với trình xem phù hợp? –

+1

Kết hợp điều này với Latex (có thể sử dụng Sweave, cũng có thể mà không có tôi nghĩ) sẽ cho phép bạn tạo một pdf với một báo cáo. –

+0

Tôi không quen với latex (sẽ có một cái nhìn), và người xem hình ảnh không seam như một cách rất mạnh mẽ của việc này để làm việc (tức là ai đó cài đặt một số phần mềm máy ảnh và tất cả mọi thứ phá vỡ) Tôi tự hỏi nếu một lô tập tin có thể giúp đỡ, chỉ cần cố gắng nhưng rscript vẫn thoát khỏi lối ra và đóng cửa sổ đồ thị. Cảm ơn các ý tưởng. – BetaScoo8

Trả lời

9

này làm việc cho tôi trên Linux:

#!/usr/bin/env Rscript 

X11() 
with(mtcars, plot(mpg, hp)) 
locator(1) 

Người dùng phải nhấp vào cửa sổ lô trước khi biến mất. Tôi đoán nó sẽ làm việc trên Windows với một cuộc gọi đến windows() thay thế.

+0

Kịch bản thực sự gọi windows() 4 lần, nhưng tất cả chúng đều đóng khi kịch bản thoát không may. Tôi đã thử bằng cách sử dụng định vị() nhưng hoặc là tôi không đủ nhanh với các nhấp chuột của tôi, hoặc nó không hoạt động. – BetaScoo8

+0

Đó là nghĩa vụ phải giữ cho cửa sổ âm mưu lên _until_ người dùng nhấp chuột. Xin lỗi nó không làm việc cho bạn. –

+0

Ah ok, có thể là cách tôi đã thực hiện nó. Cảm ơn – BetaScoo8

2

Giải pháp của Michael có thể đã hoạt động, nhưng đây là nội dung hiển thị ô trong khung tkrplot. Gói tkrplot (trên CRAN) sử dụng các phần mở rộng tcltk cho R và có sẵn ở mọi nơi.

# From http://stackoverflow.com/questions/3063165/ 
#  r-building-a-simple-command-line-plotting-tool- 
#  capturing-window-close-events 

require(tcltk) 
library(tkrplot) 

## function to display plot, called by tkrplot and embedded in a window 
plotIt <- function(){ plot(x=1:10, y=1:10) } 
tt <- tktoplevel()  ## create top level window event handler 
done <- tclVar(0)  ## variable to wait on  
## bind to the window destroy event, set done variable when destroyed 
tkbind(tt,"<Destroy>",function() tclvalue(done) <- 1) 
## Have tkrplot embed the plot window, then realize it with tkgrid 
tkgrid(tkrplot(tt,plotIt)) 
tkwait.variable(done) ## wait until done is true 
## script continues, or exits, ... once plot is closed 

Nếu bạn xem xét thông qua các tài liệu tcltk cho R, bạn tìm thấy những ví dụ khác với các nút 'Ok' để đóng, vv

2

Làm thế nào về Sys.sleep (1e30)? Điều đó sẽ chờ đợi đủ lâu.

+0

hah, đó là giải pháp nhanh chóng và dơ bẩn. Xuất sắc. – BetaScoo8

+0

người dùng sẽ phải đóng cửa sổ hoặc nhấn thoát hoặc ctrl-một cái gì đó để thoát khỏi nó mặc dù. – Spacedman

+0

để làm cho nó hoạt động trong Windows chỉ cần sử dụng Sys.sleep (10000), thực sự, 1e30 không có hiệu lực (Windows 8 64 bit) – pommedeterresautee

1

OK, tôi sẽ hoàn toàn bitch về tất cả các câu trả lời tôi đã nhìn thấy loại câu hỏi này bởi vì không ai trong số họ làm việc trên các cửa sổ. readline, tkwait.window, Sys.sleep (1e30), trong khi (TRUE), không có tác phẩm nào hoạt động.

Nhưng tôi vừa cập nhật R thành v3.1.0 và bây giờ tkwait.window (yourmainwindow) hoạt động, trong khi (TRUE) {} hoạt động, mặc dù Sys.sleep (1e30) vẫn không hoạt động.

Đừng bận tâm ... Tôi đang sử dụng tkwait.window, cos là tk và đợi cửa sổ của tôi (đó là những gì tôi muốn).

Lấy ví dụ từ http://www.sciviews.org/_rgui/tcltk/OKtoplevel.html để hoạt động ... (các bình luận đã được gỡ bỏ để ngắn gọn)

require(tcltk) 
tt <- tktoplevel() 
OK.but <- tkbutton(tt, text = "OK", command = function() tkdestroy(tt)) 
tkgrid(OK.but) 
tkfocus(tt) 
tkwait.window(tt) # <-- added this to make the window stay! 
Các vấn đề liên quan