R-在循环中设置执行时间限制
我有一个使用rNOMADS包下载预测数据的脚本。目前,它使用for循环按顺序为每个三小时的预测间隔调用预测下载函数。问题是下载功能偶尔会随机“冻结”,这迫使我终止R并重新启动进程。当它冻结时,代码在下载功能处挂起数分钟,而不是包R-在循环中设置执行时间限制,r,R,我有一个使用rNOMADS包下载预测数据的脚本。目前,它使用for循环按顺序为每个三小时的预测间隔调用预测下载函数。问题是下载功能偶尔会随机“冻结”,这迫使我终止R并重新启动进程。当它冻结时,代码在下载功能处挂起数分钟,而不是包R.utils的典型函数evalWithTimeout evalWithTimeout(Sys.sleep(10), timeout = 1) (时间单位为秒) 注意:我没有经常使用这个函数,我喜欢你的问题,所以我在谷歌上搜索了一下,找到了这个函数。这个函数现在的工作原
R.utils
的典型函数evalWithTimeout
evalWithTimeout(Sys.sleep(10), timeout = 1)
(时间单位为秒)
注意:我没有经常使用这个函数,我喜欢你的问题,所以我在谷歌上搜索了一下,找到了这个函数。这个函数现在的工作原理如下:
library(R.utils)
withTimeout(Sys.sleep(10), timeout = 1)#stop execution after one second
在某些情况下,我非常喜欢R.utils,但如果存在内部错误消息,它会对内部错误消息进行回溯(假设您正在并行运行,并希望在超时后将其包装) R base具有
setTimeLimit
功能,您可以使用{}
对表达式进行包装。它返回一个简单的错误消息,因此非常有用,并且不会删除其他错误处理的可能性(例如withCallingHandlers
,这对于解析/存储错误消息和调用堆栈非常有用):
test\u funwithTimeout
是较新的函数res,它不适用于Sys.sleep()
。你说得对。你需要“计算”一些东西(如上面的例子)。
library(R.utils)
withTimeout(Sys.sleep(10), timeout = 1)#stop execution after one second
test_fun <- function() {
repeat {
runif(100)
}
}
res <- {
setTimeLimit(5)
test_fun()
}