我正在Cousera上介紹R編程課程。第一項任務是評估指定目錄中數百個csv文件的列表(「./specdata/」),每個csv文件又包含數百個大氣中樣本污染物數據記錄 - 日期,亞硫酸鹽樣本,硝酸鹽樣本和標識採樣位置的IDR for循環 - 在循環外追加結果
該任務要求我們創建一個函數,該函數將污染物作爲採樣位置的id或id範圍,並返回樣本均值,並給出所提供的參數。
我的代碼(如下)使用一個for循環使用id參數爲只讀感興趣的文件(不是做任何處理之前,所有322個讀取文件似乎更有效)。這偉大工程。
在循環中,我將csv文件的內容分配給一個變量。然後,我將該變量作爲數據框,並使用rbind
將每個循環中讀入的文件追加到它。我使用na.omit
從變量中刪除丟失的文件。然後我使用rbind
將循環的每次迭代的結果追加到變量中。當我在循環內打印數據框變量時,我可以看到完整的列表,按id進行分組。但是當我在循環外打印變量時,我只能看到id向量中的最後一個元素。
我想創建一個與循環內的id參數匹配的所有記錄的綜合列表,然後將合併列表傳遞到循環外進行進一步處理。我無法得到這個工作。我的代碼如下所示。
這是錯誤的方法?似乎它可以工作。非常感激任何的幫助。我搜索了StackOverflow,找不到任何能夠解決我想要做的事情。
pmean <- function(directory = "./specdata/", pollutant, id = 1:322) {
x <- list.files(path=directory, pattern="*.csv")
x <- paste(directory, x, sep="")
id1 <- id[1]
id2 <- id[length(id)]
for (i in id1:id2) {
df <- read.csv(x[i], header = TRUE)
df <- data.frame(df)
df <- na.omit(df)
df <- rbind(df)
print(df)
}
# would like a consolidated list of records here to to do more stuff, e.g. filter on pollutant and calcuate mean
}
[list.files](http://www.inside-r.org/r-doc/base/list.files)有一個* full.names *(默認設置爲False)參數,所以不需要粘貼目錄。另外,read.csv不會導入數據框,所以不需要'data.frame()'行。而'na.omit()'可能是多餘的,因爲'list.files'從指定的路徑中選擇所有非丟失的文件。如果你的意思是跳過空行,[read.table](http://www.inside-r.org/r-doc/utils/read.csv),'read.csv'的派生函數就有這樣一個參數(默認爲真)。 – Parfait