繁体   English   中英

对R中具有10行以上的csv文件应用功能

[英]Applying a function for csv files having more than 10 rows in R

以下是我为将移动平均预测应用于目录中的所有.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行)。

但是,我的目录中有一些csv文件,其中包含2个或少于2个条目,因此,当代码在整个目录上运行时,它会给出以下错误消息: Error in decompose(abc2) : time series has no or less than 2 periods 由于手动排除这些文件很困难,因此我必须使用第5行。

现在,nrows给我一个目录的所有文件名的列表,并带有编号。 行,但是当我运行整个代码时,我收到148条警告消息(该目录有148个csv文件),每条消息都说: In if (nrows >= as.vector(10)) { ... : the condition has length > 1 and only the first element will be used而我没有得到输出。

因此,在第5行中肯定是我做错了。请帮助。

nrows <- sapply(fileNames, function(f) nrow(read.csv(f)))更改为:

nrows <- nrow(abc)

为什么每次迭代都需要取所有文件中的行数。 错误告诉您出了什么问题。 每次使用第一个文件中的行数

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM