2014-06-17 103 views
0

繼具有超過10行的CSV文件的功能是,我已經在目錄中應用移動平均預測到所有的.csv文件編寫的代碼。申請中的R

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是給了我與他們沒有目錄下的所有文件名的列表。行的,但是當我運行整個代碼我得到148個警告消息(該目錄中有148個的CSV文件),每個人的說法: In if (nrows >= as.vector(10)) { ... : the condition has length > 1 and only the first element will be used,我沒有得到的輸出。

所以,肯定我做錯事在該行5,請幫助。

+0

你意識到,通過'for'循環每一次,你第一次讀「當前」文件(即'fileName'),但後來也讀_all_的文件(用'sapply')。也許你打算只檢查一下'fileName'的行數?在這種情況下,您應該刪除'sapply'行,並將'if'條件更改爲'if(nrow(abc)> = 10){'。 – jbaums

回答

0

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

nrows <- nrow(abc) 

爲什麼你需要採取的行中的所有文件的數量在每次迭代。錯誤是告訴你哪裏出了問題。這是使用每次的第一個文件的行數。