在expr之前执行*的taskhandler

时间:2014-04-10 16:48:33

标签: r callback read-eval-print-loop

在评估提示输入的expr之前是否有运行代码的回调? (搜索SO,CRAN和一些谷歌搜索已经出现了我怀疑的答案:目前的REPL实现是不可能的。如果我错过了类似详细的重复讨论,我表示道歉。)

我对addTaskCallback()及其功能系列非常熟悉。阅读helpdeveloper docs告诉我,只有在评估表达式后,该机制才会运行

最终的实现是提供一种计时机制(使用system.time()或更普通的东西);当前的方法(例如this)是有用的,但却故意不知道空闲时间。

也许类似于:

timerFunc <- local({
    .time <- 0
    function(expr, value, ok, visible) {
        if (missing(value)) {
            # called pre-evaluate
            .time <<- as.numeric(Sys.time())
        } else {
            # called post-evaluate
            gap <- as.numeric(Sys.time()) - .time
            if ( gap >= 10 ) {
                cat("##", gap, "seconds\n")
                # do something useful/meaningful
            }
        }
        return(TRUE)
    }
})
## this function does not exist (yet)
addPreTaskCallback(timerFunc)
## but this one does
addTaskCallback(timerFunc)

(这只是没有健壮性和魔术常数的示例代码......为了讨论而简洁。)

我可以想到其他一些如何使用它的人为例子;虽然大多数是教育/学术,但他们也可能效率低或懒惰。

我猜测压倒性的反应将是“这应该在R-devel上”。如果是这样,我相信这会以某种方式附加到R_ReadConsole(在R-exts中解释)。想法?

0 个答案:

没有答案