以下是我为将移动平均预测应用于目录中的所有.csv
文件而编写的代码。
fileNames <- Sys.glob("*.csv")
for (fileName in fileNames) {
abc <- read.csv(fileName, header = TRUE, sep = ",")
nrows <- sapply(fileNames, function(f) nrow(read.csv(f)))
if (nrows>=as.vector(10)) {
library(stats)
library(graphics)
library(forecast)
library(TTR)
library(zoo)
library(tseries)
abc1 = abc[,1]
abc1 = t(t(abc1))
abc1 = as.vector(abc1)
abc2 = ts(abc1, frequency = 12,start = c(2014,1))
abc_decompose = decompose(abc2)
plot(abc_decompose)
forecast = (abc_decompose$trend)
x <- data.frame(abc, forecast)
write.csv (x, file = fileName, row.names=FALSE, col.names=TRUE)
}
}
现在当我排除第5行时,即if(nrows>=as.vector(10))
代码在有足够数量的文件上运行正常。条目(我已经采取了大约20个文件,所有文件都超过10行)。
但是,我在目录中有一些包含2个或少于2个条目的csv文件,因此当代码在整个目录上运行时,它会给出以下错误消息:
Error in decompose(abc2) : time series has no or less than 2 periods
。由于手动排除这些文件很难,我必须使用第5行。
现在nrows正在给我一个目录的所有文件名列表,其中包含no。行,但是当我运行整个代码时,我得到148条警告消息(该目录有148个csv文件),每个人都说:
In if (nrows >= as.vector(10)) { ... :
the condition has length > 1 and only the first element will be used
而且我没有得到输出。
所以,我肯定在那一行做错了。请帮助。
答案 0 :(得分:0)
将nrows <- sapply(fileNames, function(f) nrow(read.csv(f)))
更改为:
nrows <- nrow(abc)
为什么需要在每次迭代时获取所有文件中的行数。错误告诉你出了什么问题。 每次使用第一个文件中的行数。