如果计算时间过长,即超过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)
有人知道为什么吗?
答案 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