r-如何使用withTimeout函数在花费太长时间时中断表达式



如果计算时间过长,即超过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)

有人知道为什么吗?

rnorm示例是一个已知的"问题",您可以在R.utilsGitHub网站上找到不支持的案例。

可以通过进行来实现这一点

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 outn"))
#Timed out
# Confirm that res is empty
res
#NULL 

相关内容

  • 没有找到相关文章

最新更新