> MLest<- arima(X, order = c(1,0,0), method = c("ML"))
> MLest
Call:
arima(x = X, order = c(1, 0, 0), method = c("ML"))
>Coefficients:
ar1 intercept
0.2657 -0.0824
0.0680 0.1018
sigma^2 estimated as 1.121: log likelihood = -295.23, aic = 596.47
我想将0.2657和1.121结果写入输出文件。我已经定义了路径和文件名,这是我的代码。
当我使用write(MLest, file=filename, append=TRUE, sep="\t")
时,我收到以下错误:
Error in cat(list(...), file, sep, fill, labels, append) :
argument 1 (type 'list') cannot be handled by 'cat'
当我使用时,write.table(MLest[1:2], file=filename,sep=" ", col.names = F, row.names = F)
它有效,但我有:
0.265705946688229 1.12087092992291
-0.0823543583874666 1.12087092992291
我想得到一个结果:
0.265705946688229 -0.0823543583874666 1.12087092992291
(每个值到不同的列)
我应该使用什么?
答案 0 :(得分:1)
write.table
在文件中编写单行有点过分。我建议您直接在矢量上使用cat
。正如您从错误消息中看到的那样,这是write.table
在引擎盖下使用的内容。这有效:
cat(with(MLest, c(coef, sigma2)), "\n", sep = "\t",
file = filename, append = TRUE)
但我要指出:每次运行此命令时,都会创建一个文件句柄,移动到文件末尾,写入一个新行,然后关闭文件句柄。这是非常低效的,你最好打开一个文件连接:
fh <- open(filename)
for (...) {
MLest <- arima(...)
cat(with(MLest, c(coef, sigma2)), "\n", sep = "\t", file = fh)
}
close(fh)
这样,只创建了一个文件句柄,它始终指向文件的末尾。
或者,您可以等待所有的arima输出创建一个完整的data.frame或系数矩阵,然后只需调用write.table
即可打印出来。
假设您已经构建了ll
个arima
个输出列表,您可以通过执行以下操作来创建和写入系数矩阵:
output.mat <- t(sapply(ll, with, c(coef, sigma2 = sigma2)))
write.table(output.mat, file = "test.csv", row.names = FALSE)
答案 1 :(得分:0)
尝试
write.table(unique(as.vector(MLest[1:2])), file=filename,sep=" ", col.names = F, row.names = F)