我試圖在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實現有關。我已經更新了答案 –