我有一组文件需要应用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)
}
答案 0 :(得分:1)
因为您只是使用常规R函数(而不是从头开始编码),所以您需要想出一些方法来估计导致过多时间的条件。如果rpart
的乘积超过某个阈值,这可能是一个查看数据框维度并跳过下一个dim(dfrm)
计算的测试。
retval = if(prod(dim(tmpData)) < 1e6) {
rpart(fmla[i], dat=tmpData, method = "class") }
请注意,此时您将在每次循环迭代时覆盖retval
,而不是将其存储到持久对象中。
您也可以尝试使用函数setTimeLimit
和setSessionLimit
,但这些会引发错误情况,您可能需要将代码置于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