gpt4 book ai didi

r - 捕获库函数的输出

转载 作者:行者123 更新时间:2023-12-04 11:00:52 25 4
gpt4 key购买 nike

我真的很茫然。我在堆栈溢出中找到了几个关于如何重定向函数输出的线程,但在我的情况下似乎没有一个线程有效。

我正在使用来自 library(forecast) 的 arima对于许多(生成的)时间序列,其中一些具有不良属性,导致 auto.arima()打印错误和警告。我无论如何都无法捕捉到这个错误,无论是通过 tryCatchcapture.output() (仅捕获正常预测)。

目标是捕获下面示例抛出的错误消息(和警告)并对其使用react。所以基本上最后我会有一些可变形式的错误和预测(尽管是错误的)。

我感谢任何建议,以下是产生错误的最小示例:

library(forecast)
testt <- c(826,816,839,995,697)
testend <- c(2015,164)
testseries <- ts(testt,end=testend,frequency=365)
auto.arima(testseries)
#tryCatch not working:
testfc <- tryCatch(forecast(auto.arima(testseries),h=1), error=function(e) NA)
#capture.output not working:
result <- capture.output(auto.arima(testseries))

最佳答案

您可以使用 type="message" 捕获错误和警告。论据 capture.output . type可以是“output”(捕获函数输出)或“message”(捕获错误和警告)。下面的函数使用 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)

关于r - 捕获库函数的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34408217/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com