R-在循环中设置执行时间限制

R-在循环中设置执行时间限制,r,R,我有一个使用rNOMADS包下载预测数据的脚本。目前,它使用for循环按顺序为每个三小时的预测间隔调用预测下载函数。问题是下载功能偶尔会随机“冻结”,这迫使我终止R并重新启动进程。当它冻结时,代码在下载功能处挂起数分钟,而不是包R.utils的典型函数evalWithTimeout evalWithTimeout(Sys.sleep(10), timeout = 1) (时间单位为秒) 注意:我没有经常使用这个函数,我喜欢你的问题,所以我在谷歌上搜索了一下,找到了这个函数。这个函数现在的工作原

我有一个使用rNOMADS包下载预测数据的脚本。目前,它使用for循环按顺序为每个三小时的预测间隔调用预测下载函数。问题是下载功能偶尔会随机“冻结”,这迫使我终止R并重新启动进程。当它冻结时,代码在下载功能处挂起数分钟,而不是包
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 fun
withTimeout
是较新的函数
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()
}