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 的建议,我正在执行以下操作,但它不起作用。我在哪里做错了?

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)
}
4

1 回答 1

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
于 2013-07-31T17:29:44.093 回答