您可以使用type="message"
参数来捕获错误和警告capture.output
.type
可以是"输出",它捕获功能输出,或"消息",它捕获错误和警告.下面的函数sapply
用于允许您capture.output
使用每个参数运行一次,将结果存储在列表中.
capture.errors = function(type, data) { sapply(type, function(type) { capture.output(auto.arima(data), type=type) }, simplify=FALSE) } out = capture.errors(c("output","message"), testseries) out $output [1] "Series: data " [2] "ARIMA(0,0,0) with non-zero mean " [3] "" [4] "Coefficients:" [5] " intercept" [6] " 834.6000" [7] "s.e. 42.4746" [8] "" [9] "sigma^2 estimated as 9020: log likelihood=-29.86" [10] "AIC=63.73 AICc=69.73 BIC=62.94" $message [1] "Error in arima(x, order = c(1, d, 0), xreg = xreg) : " [2] " non-stationary AR part from CSS" [3] "In addition: Warning message:" [4] "In auto.arima(data) : Unable to calculate AIC offset"
由于捕获模型输出capture.output
可能不如捕获模型对象中的"实际"输出那样有用,因此下面的函数可能会更好.它返回一个包含模型对象的列表以及任何错误或警告消息:
capture = function(data) { list(model=auto.arima(data), message=capture.output(auto.arima(data), type="message")) }
模型对象以通常的方式提供,所以下面我只看一下消息输出.
out1 = capture(testseries) # Show any errors and warnings out1[["message"]] [1] "Error in arima(x, order = c(1, d, 0), xreg = xreg) : " [2] " non-stationary AR part from CSS" [3] "In addition: Warning message:" [4] "In auto.arima(data) : Unable to calculate AIC offset" out2 = capture(cumsum(rnorm(100))) # No errors or warnings with this data set out2[["message"]] character(0)