2016-12-16 43 views
1

是否可以在退出R會話時啓動命令,類似於.Rprofile文件中的命令,但是僅在離開會話時發出命令。 我當然知道一個.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',因此這裏並不適用。這是否是正確的,通過使用'environment()'而不是'e'?像 'reg.finalizer(environment(),function(x){save.image(「custom.RData」,compress =「xz」)},onexit = TRUE)' – hannes101

+1

糟糕!我錯過了從我的第一篇文章粘貼'e = new.env()',但我現在有了一個更好的方法,不需要一個新的對象,並且不會意外觸發! – Spacedman

+0

我注意到這似乎並不總能正常工作。它發生了幾次,RData文件沒有完整保存。在R會話被殺之前,大小可能太大而且需要太長時間才能保存。 – hannes101