在Sys.sleep()之前不执行的函数

Dre*_*way 7 r system

我正在编写一个函数,需要在ping基于Web的API时捕获速率限制错误.

tryCatch用来捕获错误,并在此函数内我指定以下错误函数:

error=function(e) {
                warning(paste(e,"\nWaiting an hour for rate limit to reset..."))
                Sys.sleep(3600) # Wait an hour for rate-limit to reset
                return(user.info(user, ego.count))
            }
Run Code Online (Sandbox Code Playgroud)

该函数似乎有效,但在检查脚本的输出日志时,我注意到在睡眠时间用完之后才会写入警告消息.

我可以在R控制台上重现此行为:

print("Drew sucks")
Sys.sleep(10)
Run Code Online (Sandbox Code Playgroud)

之前十秒钟Drew sucks打印到控制台.在我的功能中,我想在暂停发生之前向用户提供关于这个长暂停的一些反馈.

是什么导致了这种行为?

Jos*_*ich 8

您需要设置immediate.=TRUE 警告功能,或设置options(warn=1); 并且可能需要flush.console()Sys.sleep()呼叫之前添加(在某些操作系统上).

foo <- function() {
  warning("uh-oh...", immediate.=TRUE)
  flush.console()
  Sys.sleep(5)
  "done"
}
foo()
# Warning in foo() : uh-oh...
# [1] "done"
Run Code Online (Sandbox Code Playgroud)

具体内容在"细节"部分详细说明?warning.换句话说,"如果选项(警告= 0),则在顶级功能完成后存储和打印警告;如果选项(警告= 1),则在发生时打印它们."


mjb*_*mar 3

为了它的地狱,尝试:

system(sprintf('sleep %d', seconds))
Run Code Online (Sandbox Code Playgroud)

假设您在路径上有常用的 *NIX sleep 命令。