2013-07-31 42 views
1

我有一套需要應用rpart算法的文件。其中一些文件需要很長的時間進行計算。我怎樣才能跳過這種情況(例如,需要超過一個小時的情況)並繼續到下一個?突然停止執行命令並繼續執行下一個命令

for (i in num) 
{ 
print(i) 
infilename = filenames[i] 
tmpData = read.table(infilename, header = TRUE, sep= "\t") 
retval = rpart(fmla[i], dat=tmpData, method = "class") 
print (retval) 
} 

編輯: 基於從@Dwin suggestin,我做以下,但它不工作。我在哪裏做錯了?

for (i in num) 
{ 
print(i) 
infilename = filenames[i] 
tmpData = read.table(infilename, header = TRUE, sep= "\t") 
retVal= NULL 
setTimeLimit(cpu=10) 
retval = try(rpart(fmla, dat=tmpData, method = "class")) 
print (retval) 
} 

回答

1

因爲你只是用普通R裏面的函數(而不是從頭開始編寫此),您將需要拿出一些辦法來估計導致過度次的條件。如果dim(dfrm)的乘積超過某個閾值,則這可能是一個測試,該測試查看數據幀的維度並跳過下一個計算結果rpart

retval = if(prod(dim(tmpData)) < 1e6) { 
       rpart(fmla[i], dat=tmpData, method = "class") } 

注意,此刻的你與每次循環覆蓋retval,而不是將其存儲到一個持久的對象。

您也可以嘗試使用功能setTimeLimitsetSessionLimit但這些將拋出一個錯誤條件,你可能需要把你的代碼try函數裏面正常恢復:

setTimeLimit(cpu=2) 
for (i in 4:8) {x <- 1:10^i;x=x^3} 
max(x) 
#[1] 1e+24 
# did not exceed the limits 
x^(1/3) 
#[1]  1  2  3  4  5  6  7Error: reached CPU time limit 
+0

感謝@DWin,setTimeLimit似乎是合理的。我在等待別人是否有任何想法。 – learner

+0

謝謝,但實際的代碼不起作用。你的例子雖然工作。 – learner