Из документации ?reg.finalizer
в R:
В частности, он предоставляет способ программирования кода, который должен быть запущен в конце сеанса R без манипулирования
.Last
. Для использования в пакете часто бывает полезно установить финализатор для объекта в пространстве имен: тогда он будет вызываться в конце сеанса или вскоре после того, как пространство имен будет выгружено, если это будет сделано во время сеанса.
Кажется, я могу использовать reg.finalizer()
для запуска определенного кода при завершении сеанса R, но он не работает для меня. Я подготовил минимальный пакет 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)
>
>
$