2013-07-31 106 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