突然停止执行命令并继续执行下一个命令

时间:2013-07-31 17:05:22

标签: r

我有一组文件需要应用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的建议,我正在做以下但是它不起作用。我在哪里做错了?

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 个答案:

答案 0 :(得分:1)

因为您只是使用常规R函数(而不是从头开始编码),所以您需要想出一些方法来估计导致过多时间的条件。如果rpart的乘积超过某个阈值,这可能是一个查看数据框维度并跳过下一个dim(dfrm)计算的测试。

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