.onLoad和交互式 - 意外行为?

时间:2012-04-30 15:56:52

标签: r package interactive

我有一个包,打算由通过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()的文档都没有说明相关的内容。

菲尔

1 个答案:

答案 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"