【发布时间】:2018-01-23 16:31:45
【问题描述】:
来自 R 中的文档 ?reg.finalizer:
除其他外,它提供了一种在 R 会话结束时对代码进行编程的方法,无需操纵
.Last。对于在包中使用,在命名空间中的对象上设置终结器通常是一个好主意:然后它将在会话结束时调用,或者如果在会话期间完成命名空间卸载后不久就会调用它。
似乎我可以在 R 会话结束时使用reg.finalizer() 运行某些代码,但它对我不起作用。我在https://github.com/yihui/finalizer-test准备了一个最小的包,基本包含以下代码:
e = new.env()
reg.finalizer(e, function(e) {
message('Bye!')
}, onexit = TRUE)
如果我只是在交互式 R 会话中运行上述代码并退出会话,我可以看到消息 Bye!,但如果我安装上述包(您可以使用 devtools::install_github('yihui/finalizer-test')),请将其加载到 R会话,并退出 R 会话,我没有看到该消息。我想知道为什么在这种情况下不执行终结器。
FWIW,当我安装包时,我可以看到消息Bye!:
$ R CMD INSTALL .
* installing to library ‘/Users/yihui/R’
* installing *source* package ‘finalizer’ ...
** R
** preparing package for lazy loading
No man pages found in package ‘finalizer’
** help
*** installing help indices
Bye!
** building package indices
** testing if installed package can be loaded
* DONE (finalizer)
当我运行以下命令时,我也没有看到该消息:
$ R -e "library(finalizer)"
> library(finalizer)
>
>
$
【问题讨论】: