2016-12-16 4 views
1

.Rprofileファイルのコマンドと同様に、Rセッションを終了するときにコマンドを開始することは可能ですか? もちろん、.RDataファイルは自動的に保存できますが、ストレージの設定が異なる可能性があるマシンを頻繁に切り替えているため、セッションごとにカスタムsave.image()コマンドを実行する方が簡単です。Rセッションを終了するカスタムコマンドの実行

+1

'.Last'関数の定義は役に立ちますか? https://stat.ethz.ch/R-manual/R-devel/library/base/html/quit.html – Jean

+0

これは私にreg.finalizerのヒントをくれました、ありがとう! – hannes101

答えて

1

qのヘルプは、いくつかのヒントを与えることができます。 .Lastという関数を作成するか、終了時に実行する環境にファイナライザを登録することができます。

> reg.finalizer(.GlobalEnv,function(e){message("Bye Bye")},onexit=TRUE) 
> q() 
Save workspace image? [y/n/c]: n 
Bye bye! 

あなたはそれがかなり永続的なものにしたい場合は、お使いのRの起動(例えば.RProfile)でファイナライザを登録することができます。

[編集:以前は新しい環境にファイナライザを登録しましたが、ガベージコレクションによってファイナライザがトリガされるため、このオブジェクトを保持し、削除しないことを意味します。私が今作成したように、ファイナライザは地球環境に接続されています。通常の使用時にはガベージコレクションは行われません)]

+0

eは定義されていないので、ここではすぐには動作しません。 'e'の代わりに' environment() 'を使うことで正しいでしょうか? 'reg.finalizer(environment()、function(x){save.image(" custom.RData "、compress =" xz ")}、onexit = TRUE)' – hannes101

+1

おっと!私は最初の投稿から 'e = new.env()'を貼り付けるのを忘れましたが、私は今、新しいオブジェクトを必要とせず、誤ってトリガーしない優れたメソッドを持っています! – Spacedman

+0

これは必ずしも正しく動作するとは限りません。 RDataファイルが完全に保存されていないことが数回発生します。おそらくサイズが大きすぎると、Rセッションが終了する前に保存するのに時間がかかりすぎます。 – hannes101

関連する問題