我试图在R中运行一个模拟,在那里我制作了一大堆系统发育树。树模拟有点问题,因为它的运行时间变化很大,有时候是0.005秒,有时是几分钟。我想避免缓慢的树木,所以我试图使用evalWithTimeout来跳过它们。到目前为止,我遇到了问题,因为我无法在不杀死循环的情况下杀死缓慢的任务。 我的问题与this question类似,但该问题的解决方案对我没有帮助。在R循环中跳过慢任务
library(TreeSim)
library(R.utils)
for (i in 1:100){
tryCatch(
expr = {
evalWithTimeout(sim.rateshift.taxa(10,1,c(0.5,2),c(0.5,0),
c(1,1),c(0,0.5),complete=F),
timeout=0.005)
},
TimeoutException = function(ex) cat("Timeout. Skipping.\n")
)
print(i)
}
这是我到目前为止。我希望它继续打印“我”,无论模拟是否超过时间限制,但目前它给我“达到CPU时间限制”的错误和停止。
这个例子中完美的作品。当我用“sim.rateshift.taxa(10,1,c(0.5,2),c(0.5,0),c(1,1),c(0,0.5),complete = F)”代替foo ),它在大多数时间都有效,但依赖于时间限制。将限制设置得太低会导致功能因错误“达到CPU时间限制”而中断。我会认为它会更频繁地跳过下限。 –
您遇到的问题也与R.utils实现有关。我已经更新了答案 –