我有一个脚本使用rNOMADS包下载预测数据.目前,它使用for循环按顺序调用每三小时预测间隔的预测下载功能.问题是下载功能偶尔会随机"冻结",迫使我终止R并开始进程.当它冻结时,代码会在下载功能中挂起几分钟,而不是执行所需的典型<1秒,然后当我尝试暂停执行时,我收到一条消息,说"R没有响应您的中断处理请求,所以停止你可能需要完全终止R的当前操作."
有没有办法为每个for循环迭代中的特定代码块设置时间限制,然后跳过该代码块并在达到时间限制时抛出错误?像tryCatch这样的东西,我可以用它来引发一个标志来重新做循环迭代吗?
就像是:
for (i in 1:N) {
...
setTimeLimit(XXX seconds) {
downloadFunction()
} timeLimitReached {
doOverFlag <- 1
}
}
Run Code Online (Sandbox Code Playgroud)
提前致谢!
kas*_*rma 11
evalWithTimeout包的功能就是R.utils这样.
evalWithTimeout(Sys.sleep(10), timeout = 1)
Run Code Online (Sandbox Code Playgroud)
(时间以秒为单位).
注意:我没有经常使用这个功能,我喜欢你的问题所以我做了一些谷歌搜索并找到了这个.
在某些情况下,我真的很喜欢 R.utils,但是如果有的话,它会破坏内部错误消息的回溯(假设您正在并行运行并希望将其包装在超时中)
R base 具有setTimeLimit您可以{}与表达式一起使用的功能。它返回一条简单的错误消息,因此非常有用,并且不会消除其他错误处理的可能性(例如withCallingHandlers这对于解析/存储错误消息和调用堆栈非常有用):
test_fun <- function() {
repeat {
runif(100)
}
}
res <- {
setTimeLimit(5)
test_fun()
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2961 次 |
| 最近记录: |