【问题标题】:.onLoad and interactive - unexpected behaviour?.onLoad 和交互式 - 意外行为?
【发布时间】:2012-04-30 15:56:51
【问题描述】:

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

菲尔

【问题讨论】:

    标签: r package interactive


    【解决方案1】:

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

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

     library(devtools)
     document('dummy')
     build('dummy')
     install('dummy')
     # ...
     # [1] "interactive() =  FALSE"
    
     detach("package:dummy", unload=T)
     library(dummy)
     # [1] "interactive() =  TRUE"
    

    【讨论】:

    • 奇怪的是install 似乎没有附加该包,即使它返回时没有错误。当我尝试通过library 加载它时,它确实给出了“interactive() = TRUE”。谢谢!
    猜你喜欢
    • 2020-10-05
    • 2013-04-16
    • 2013-04-28
    • 1970-01-01
    • 2016-10-11
    • 1970-01-01
    • 2018-07-11
    • 2014-08-11
    • 1970-01-01
    相关资源
    最近更新 更多