[R]コンソール画面の表示を更新する
コンソール画面でsource関数でスクリプトを実行したとき、cat関数などで出力した結果はすぐには表示されない。例えば、以下の4行の内容をスクリプトファイルwait1.Rに保存する。
for (i in 1:5) {
cat(sprintf("%d\n", i))
mx <- solve(matrix(rnorm(1.e6), nrow = 1.e3))
}
実行してみる。
> source("wait1.R")
1
2
3
4
5
実行後、数秒~十数秒間何も表示されずに待たされた後に、1から5までがまとめて表示されるはず。Rのコンソール画面では、cat関数などによるコンソールへの出力はまとめて出力されてしまう。これを、逐次表示されるようにするには、flush.console関数を使う。
for (i in 1:5) {
cat(sprintf("%d\n", i))
mx <- solve(matrix(rnorm(1.e6), nrow = 1.e3))
flush.console()
}
以下の5行の内容をスクリプトファイルwait2.Rに保存する。
for (i in 1:5) {
cat(sprintf("%d\n", i))
mx <- solve(matrix(rnorm(1.e6), nrow = 1.e3))
flush.console()
}
実行してみる。
> source("wait2.R")
1
2
3
4
5
今度は、1から5までが順次表示されるはず。flush.console関数の場所で、コンソール画面の表示が更新されている。これは、例えば処理に時間のかかるスクリプトを作成し、その実行の経過をコンソール画面への出力で確認するときなど使えるテクニック。
VBA(Visual Basic for Applications)では、画面表示などを更新(画面表示のバッファを解放)するためにDoEvents関数を使用するテクニックがあるが、それと似たような動作と思えばよい(ただし、こちらはオペレーティングシステムに制御を一瞬渡すのであって、更新されるのは画面表示に限らないことに注意)。
なお、バッチ処理では、このようなコンソールへの出力はまとめて行われないことに注意。
« [R]計算機イプシロンを得る | トップページ | [C#]三角関数の値の計算 »

コメント