1

我正在 R 中构建一个 Arima 模型。我正在尝试使用 tryCatch 来处理模型训练中的异常——特别是在我没有足够数据来构建模型的情况下。由于我训练了很多模型(大约 380 个),我尝试使用 R 中的 doParallel 包来实现这个。但我注意到有些警告我只需要忽略。下面给出的是我尝试过的。但我可以看到一些线程只是卡住了。我只是想知道警告处理代码是否将线程置于无限循环中,因为我尝试在警告中调用相同的表达式。

        #some sample data
ops <- ['Android', 'iOS']
country <- ['US', 'CA']
apps <- ['A', 'B', 'C']


nCores <- detectCores()
registerDoParallel(cores = nCores)

foreach(os=ops)%:% foreach(country=countries) %:% foreach(app=apps)%dopar%{ 
modeling <- function(y_data) 
{
#the function model is implemented inside the models.R #source file
#it basically uses auto.arima with some fourier regressors 
#and returns to model

source("models.R")

#for each condition get data as y_data
tryCatch( 
{ 
suppressWarnings ( 
out <- model(data=y_data)
) 
}, 

warning=function(w)
{ 
print(w) 
suppressWarnings ( 
out <- model(data=y_data) 
) 
},
error=function(e) {
print(e) 
return(NULL) }

write.table(out$AICC, "results.csv")
}


modeling(y_data)
}

请注意,首先我只尝试了 4 次循环迭代,第一次运行得非常快,但其他 3 次迭代一直在运行。

4

1 回答 1

1

您想忽略警告但在suppressWarning?

...
warning=function(w)
{ 
print(w) 
suppressWarnings ( 
...

您没有提供可重现的示例,但我会尝试从一组最少的行开始:

...
nCores <- detectCores()
registerDoParallel(cores = nCores)
source("models.R")

modeling <- function(y_data) {
  tryCatch({
    suppressWarnings(out <- model(data=y_data))
    })
}

foreach(os=ops) %:% foreach(country=countries) %:% foreach(app=apps) %dopar% {
  modeling(y_data)
}
于 2017-04-28T19:13:02.577 回答