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)
}
これまで私がこれまで行ってきたことです。私は、シミュレーションが期限を過ぎているかどうかに関わらず "i"を印刷し続けたいと思いますが、現在は "CPU時間制限に達しました"というエラーを表示して停止します。
この例では完全に動作します。 fooの中で "sim.rateshift.taxa(10,1、c(0.5,2)、c(0.5,0)、c(1,1)、c(0,0.5)、complete = F) )、それはほとんどの時間で動作しますが、タイムアウトの制限に依存します。制限値を小さすぎると、関数は "CPU時間制限に達しました"というエラーで中断します。私はfooを下限でより頻繁にスキップすると思っていたでしょう。 –
あなたが抱えている問題はR.utilsの実装にも関係しています。私は答えを更新しました –