如果花费太长时间,如何使用withTimeout函数来中断表达式

时间:2018-08-02 10:35:49

标签: r timeout

如果计算时间过长,即超过2秒,我想终止一些代码。我正在尝试使用withTimeout函数。阅读帮助中的示例,以下代码正在运行,并且出现错误:

foo <- function() {
    print("Tic")
    for (kk in 1:100) {
    print(kk)
    Sys.sleep(0.1)
    }
print("Tac")
}

res <- withTimeout({foo()}, timeout = 2)

我试图通过编写以下代码来复制此逻辑,但是它不起作用,即即使超时已过去(在我的笔记本电脑上,大约需要10秒钟),计算仍会结束。

res <- withTimeout({rnorm(100000000)}, timeout = 2)

有人知道为什么吗?

1 个答案:

答案 0 :(得分:1)

rnorm示例是一个已知的“问题”,您可以在invalidating a previously cached response上找到它作为不支持的情况。

可以通过这样做

foo1 <- function(n = 1000000) { 
    ret <- rep(0, n); 
    for (kk in 1:n) ret[kk] <- rnorm(1); 
    ret; 
}

# The following will time out after 2s
tryCatch( { res <- withTimeout( { foo1() },
    timeout = 2) },
    TimeoutException = function(ex) cat("Timed out\n"))
#Timed out

# Confirm that res is empty
res
#NULL