2

我有一个包,旨在供通过 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() 的文档都没有说任何相关的内容。

菲尔

4

1 回答 1

1

运行build()and之后install(),您是否尝试过取消附加卸载包,然后重新加载它?

这是我这样做时得到的结果,包括你.onLoad在一个名为“dummy”的包中的函数:

 library(devtools)
 document('dummy')
 build('dummy')
 install('dummy')
 # ...
 # [1] "interactive() =  FALSE"

 detach("package:dummy", unload=T)
 library(dummy)
 # [1] "interactive() =  TRUE"
于 2012-04-30T17:51:43.017 回答