2014-10-06 122 views
2

我的代码包含一个命令,它对于它的运行是必不可少的,但它最终会在控制台中显示此命令的结果,我试图使用suppressWarnings(),,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"] 

上述代码的最后一行总是显示在控制台,它自动执行此用于使问题报告时的概要。有谁知道可以阻止这种情况发生的命令?

三江源

我已经找到一种方法来隐藏它,而自动化的报告,但如果有谁知道如何隐藏它,而只是运行的代码,使这一进程更快,那么这将是很有益的反正:)

+0

'ets'来自哪个包? – Spacedman 2014-10-06 11:03:27

+1

从tseries或预测我相信,对不起,我忘了代码 – 2014-10-06 11:06:33

回答

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() 
+1

Thankyou那工作:)我会记住,为将来使用! :) – 2014-10-06 11:03:18

2

我知道,可能看起来像一个坏样式的方法,但这似乎工作

sink(tempfile()) 
mae11Ad<-summary(fstAdi)[,"MAE"] 
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 

它具有不需要任何输出转移的优势,更具有可读性。

+1

Thankyou,我正在使用别人的代码,所以我没有看过像这样的所有细节。 Thankyou,我现在将你的答案应用于代码:) – 2014-10-06 12:34:22