在评估提示输入的expr
之前是否有运行代码的回调? (搜索SO,CRAN和一些谷歌搜索已经出现了我怀疑的答案:目前的REPL实现是不可能的。如果我错过了类似详细的重复讨论,我表示道歉。)
我对addTaskCallback()
及其功能系列非常熟悉。阅读help和developer 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中解释)。想法?