나는 계통 발생 나무 전체를 만드는 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 구현과 관련이 있습니다. 답변을 업데이트했습니다. –