我有一个包,打算由通过Rscript运行的非交互式脚本使用。但我也希望能够在交互式会话中加载它,主要用于调试目的。当在Rscript或其他非交互式会话中使用时,我想使用.onLoad进行初始化,所以我有以下几点:
.onLoad <- function(libname, pkgname) {
if ( !interactive() ) {
# Do some stuff
} else {
# Do something slightly different
}
问题是即使在交互式会话中,interactive()也会在.onLoad中返回FALSE。我通过以下方式测试:
.onLoad <- function(libname, pkgname) {
print( paste( "interactive() = ", interactive(), collapse="" ) )
}
然后当我build()
和install()
(使用devtools)时,安装会使用消息"interactive() = FALSE"
附加库。
有什么想法吗? .onLoad()和interactive()的文档都没有说明相关的内容。
菲尔
答案 0 :(得分:1)
运行build()
和install()
之后,您是否尝试取消附加和卸载软件包,然后重新加载它?
这是我在这样做时得到的内容,包括名为'dummy'的包中的.onLoad
函数:
library(devtools)
document('dummy')
build('dummy')
install('dummy')
# ...
# [1] "interactive() = FALSE"
detach("package:dummy", unload=T)
library(dummy)
# [1] "interactive() = TRUE"