2

我的代码包含一个对其运行必不可少的命令,但是它最终在控制台中显示了该命令的结果,我尝试使用suppressWarnings(), suppressMessages()invisible()sink()所有这些仍然显示结果。

这是一个示例数据集,问题出在哪里:

M<-c(1111,1222,1333,1444,1555,1666,1777,2223,6654,9867,1123,1456,2436,6875)
fstAdi <- ets(ts(rep(M,length = length(M)), deltat= 1/4, start = c(8,1)), model = "AAA", damped = FALSE, opt.crit = "mae", ic="aic", lower = c(0, 0, 0, 0), upper = c(0.999, 0.999, 0.999, 0.999), bounds = "admissible", restrict = FALSE)
mae11Ad<-summary(fstAdi)[,"MAE"]

上面代码的最后一行总是在控制台中显示摘要,当自动报告导致问题时。有谁知道可以阻止这种情况发生的命令?

谢谢

我找到了一种在自动生成报告时隐藏它的方法,但是如果有人知道如何在运行代码以使过程更快的同时隐藏它,那么无论如何这将非常有帮助:)

4

3 回答 3

6

对象的汇总方法ets有点冗长:

> forecast:::summary.ets
function (object, ...) 
{
    print(object)
    cat("\nTraining set error measures:\n")
    print(accuracy(object))
}
<bytecode: 0x161d31c8>
<environment: namespace:forecast>

这是一种非常糟糕的风格,摘要方法应该返回一个带有类的对象,并且该类的打印方法应该产生输出。

所以你可以accuracy在你的对象上调用该方法:

> accuracy(fstAdi)[,"MAE"]
[1] 1971.468

它的优点是不需要任何输出转移并且更具可读性。

于 2014-10-06T11:14:44.757 回答
4

sink确实有效,您到底是如何使用它的?例如尝试

M<-c(1111,1222,1333,1444,1555,1666,1777,2223,6654,9867,1123,1456,2436,6875)
fstAdi <- ets(ts(rep(M,length = length(M)), deltat= 1/4, start = c(8,1)), model = "AAA", damped = FALSE, opt.crit = "mae", ic="aic", lower = c(0, 0, 0, 0), upper = c(0.999, 0.999, 0.999, 0.999), bounds = "admissible", restrict = FALSE)
sink(tempfile())
mae11Ad<-summary(fstAdi)[,"MAE"]
sink()
于 2014-10-06T10:49:15.067 回答
2

我知道这可能看起来像是一种糟糕的方法,但这似乎有效

sink( tempfile() )
mae11Ad<-summary(fstAdi)[,"MAE"]
于 2014-10-06T10:55:25.893 回答