7

データベースにクエリを実行し、分析を実行し、現在のシステム日付に基づいていくつかのグラフをプロットするRスクリプトがあります。

このスクリプトを起動時に毎日実行したいのですが、必要なパラメーターを指定してrscript.exeへのショートカットを使用するだけで、かなり簡単に実行できると思いました。

これは正常に機能しますが、スクリプトは実行後に終了するため、グラフの表示にはあまり役立ちません。

XPとwin7を使用しています。

スクリプトからの出力を画面に表示する簡単な方法はありますか?スクリプトにスキャンを組み込んでみましたが、一時停止しません。

rguiを開いて、1行のコードを実行するだけでよいことはわかっていますが、これをRにまったく慣れていない同僚のコンピューターにデプロイする予定です。

4

4 に答える 4

9

これはLinuxで私のために働きます:

#!/usr/bin/env Rscript

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

ユーザーは、プロットウィンドウが消える前にクリックする必要があります。代わりにを呼び出すと、Windowsで動作すると思いますwindows()

于 2011-11-17T13:51:16.853 に答える
2

Michaelのソリューションはすでに機能している可能性がありますが、これはtkrplotフレーム内のプロットを示すものです。tkrplotパッケージ(CRAN)はRのtcltk拡張機能を使用しており、どこでも利用できます。

# 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

Rのtcltkドキュメントを見ると、閉じるための「OK」ボタンなどを備えた他の例が見つかります。

于 2011-11-17T14:22:19.923 に答える
2

Sys.sleep(1e30)はどうですか?それは十分長く待つ必要があります。

于 2011-11-17T14:30:39.933 に答える
1

OK、私はこの種の質問に対して私が見たすべての答えについて完全に雌犬になるつもりでした。なぜなら、それらのどれもウィンドウで機能しなかったからです。readline、tkwait.window、Sys.sleep(1e30)、while(TRUE)、どれも機能しませんでした。

しかし、Rをv3.1.0に更新したところ、tkwait.window(yourmainwindow)は機能し、(TRUE){}は機能しますが、Sys.sleep(1e30)はまだ機能しません。

気にしないでください...私はtkwait.windowを使用しています。これはtkであり、ウィンドウを待機しています(これが私が望むものです)。

たとえば、http://www.sciviews.org/_rgui/tcltk/OKtoplevel.htmlから機能させる...(簡潔にするためにコメントを削除)

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!
于 2014-05-22T21:41:49.830 に答える