2014/09/07
R > DOS 窓でインタラクティブな実行(4)
R > DOS 窓でインタラクティブな実行(4)
2014/08/30 の改良版。R スクリプトの実行−結果確認−修正−必要に応じて再実行、のサイクルを DOS 窓で便利に行う、別の方法を考えた。スクリプトファイルは普通のまま、バッチファイルだけに待機と再実行の処理を組み込む。実行環境は 2014/08/13 の実機を参照。
例えば ↓ のようなスクリプトがあるとする。
■ スクリプトファイル例(通常の R スクリプトなら何でも良い)
同じフォルダに ↓ の内容のバッチファイルを作り、スクリプトファイル名.bat というファイル名にする。準備はこれだけ。
■ バッチファイル(スクリプトファイル名.bat として、同じ所に置く)
↓ 実際のバッチの中身。Rscript.exe を呼び出す所は一行。-e オプションで R のワンライナーを実行できる。そこにスクリプト実行−待機−指示があれば再実行、の処理を入れた。
スクリプトファイル名は何でも可、バッチも常に同じ内容でよく、ファイル名だけ ↓ このようにスクリプトに合わせる。バッチのダブルクリックで実行開始。
↓ 最初の実行画面。スクリプトを一回実行して待機モードになる。エンターで再実行、それ以外(何らかの文字+エンター)で終了。このへんの分岐の仕方は、バッチファイル中の R ワンライナーで自由に設定できる。
スクリプト実行は source 関数で行っており、待機モードの時はスクリプトが解放され自由に編集できる。実行結果を見て例えば ↓ のようにエディタで新しい処理を追加するなど。
↓ スクリプト編集後、DOS 窓に戻ってエンターを押せば直ちに再実行される。パッケージのロードは二回目以降は不要。
スクリプト編集画面から DOS 窓に移るという一手間あるが、エディタを自由に選べることが自分にとって重要。またエディタの外部コマンド実行機能で R を呼び出すと、常に R の起動とパッケージロードを一から行うので効率が悪い。
もう一つ例としてグラフィック窓を使うスクリプト。↓ の内容で適当な場所に置く。
■ 20140907_test.R
同じ場所に、先ほどと同じ内容のバッチを 20140907_test.R.bat というファイル名で作り、ダブルクリックする。↓ 初回は点がポツポツと表示されるだけ。
↓ DOS 窓でエンターを押して再実行するたび、グラフィック窓に y = sin(x) 上の新しい点がプロットされて関数の形が出てくる。
ただし、自分の環境ではグラフィック窓の挙動が変。メニューバーが消えたり、うまくフォーカスできなかったり。R のコンソールを起動せずにグラフィック窓だけ使うことに無理があるのかも。グラフなどプロット結果の確認が重要なら、PDF 等に出力する方が良さそう。
例えば ↓ のようなスクリプトがあるとする。
■ スクリプトファイル例(通常の R スクリプトなら何でも良い)
message('Start ', Sys.time())
library(rgeos)
message(' 何らかの処理...1')
message(' 何らかの処理...2')
message(' 何らかの処理...3')
message(' 何らかの処理...4')
message(' 何らかの処理...5')
message('End ', Sys.time())
同じフォルダに ↓ の内容のバッチファイルを作り、スクリプトファイル名.bat というファイル名にする。準備はこれだけ。
■ バッチファイル(スクリプトファイル名.bat として、同じ所に置く)
@ECHO OFF
"C:/Program Files/R/R-2.15.3/bin/i386/Rscript.exe" --slave -e "while(1){
source(paste(sep='/', getwd(), '%~n0'));
con=file('stdin'); message('Enter : Redo\nOthers : End');
inp=scan(con, nlines=1, quiet=T, what=character()); close(con);
if(length(inp) > 0) break }"
REM ↑ 実際は "C:/... から一行
ECHO R quit. Press any key to close.
PAUSE > NUL
↓ 実際のバッチの中身。Rscript.exe を呼び出す所は一行。-e オプションで R のワンライナーを実行できる。そこにスクリプト実行−待機−指示があれば再実行、の処理を入れた。
スクリプトファイル名は何でも可、バッチも常に同じ内容でよく、ファイル名だけ ↓ このようにスクリプトに合わせる。バッチのダブルクリックで実行開始。
↓ 最初の実行画面。スクリプトを一回実行して待機モードになる。エンターで再実行、それ以外(何らかの文字+エンター)で終了。このへんの分岐の仕方は、バッチファイル中の R ワンライナーで自由に設定できる。
スクリプト実行は source 関数で行っており、待機モードの時はスクリプトが解放され自由に編集できる。実行結果を見て例えば ↓ のようにエディタで新しい処理を追加するなど。
↓ スクリプト編集後、DOS 窓に戻ってエンターを押せば直ちに再実行される。パッケージのロードは二回目以降は不要。
スクリプト編集画面から DOS 窓に移るという一手間あるが、エディタを自由に選べることが自分にとって重要。またエディタの外部コマンド実行機能で R を呼び出すと、常に R の起動とパッケージロードを一から行うので効率が悪い。
もう一つ例としてグラフィック窓を使うスクリプト。↓ の内容で適当な場所に置く。
■ 20140907_test.R
xlm = c(-5,5)
ylm = c(-1,1)
if(is.null(dev.list())) windows(height=(300-46)/96, width=(400-8)/96)
if(par('usr')[1] != xlm[1]){
par(plt=rep(0:1, 2))
plot(axes=F, x=xlm, y=ylm, type='n', xaxs='i')
}
par(new=T)
x = runif(5) * 10 - 5
plot(axes=F, x, sin(x), pch=16, col=adjustcolor('blue', alpha=0.2)
, xaxs='i', xlim=xlm, ylim=ylm)
同じ場所に、先ほどと同じ内容のバッチを 20140907_test.R.bat というファイル名で作り、ダブルクリックする。↓ 初回は点がポツポツと表示されるだけ。
↓ DOS 窓でエンターを押して再実行するたび、グラフィック窓に y = sin(x) 上の新しい点がプロットされて関数の形が出てくる。
ただし、自分の環境ではグラフィック窓の挙動が変。メニューバーが消えたり、うまくフォーカスできなかったり。R のコンソールを起動せずにグラフィック窓だけ使うことに無理があるのかも。グラフなどプロット結果の確認が重要なら、PDF 等に出力する方が良さそう。