2016-12-16 37 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