2016-10-08 41 views
1

這是我的代碼,它給出任何輸入的NA。請幫幫我知道我要去哪裏錯了(我是初學者)我想從R中的幾個文件中找到一列的平均值

pollutantmean <- function(directory, pollutant, id=1:332){ 
    fname <- sprintf("%s/%03d.csv", directory, id) 
    ldf <- lapply(fname, read.csv) 
    df <- unlist(ldf) 
    a <- matrix(df, ncol = 3) 
    dfa <- data.frame(a) 
    colnames(dfa)<-c("date", "sulfate", "nitrate") 
    mn<-mean(dfa[, pollutant],na.rm=TRUE) 
    print(mn) 
} 
+0

最好不要使用'印刷( )'從函數返回一個值。 – jogo

回答

1

最終,你想:

fname <- sprintf("%s/%03d.csv", directory, id) 
ldf <- lapply(fname, read.csv) 

my.mean <- function(df, pollutant) mean(df[, pollutant], na.rm=TRUE) 

pollutant <- "nitrate" # or "sulfate" 
sapply(ldf, my.mean, pollutant) # or 
mean(sapply(ldf, my.mean, pollutant)) 

Alternativly你想

mean(unlist(sapply(ldf, '[[', pollutant), na.rm=TRUE)) 
+0

嘿!實際上我想要所有文件中的柱狀污染物的一個意思。上面的代碼給出了每個單獨文件的列的意思。 –

+0

@SONALIJHA我編輯了我的答案。請對這些更改發表評論。 – jogo

+0

如果文件長度不同,'sapply'將返回一個列表,並且'mean(sapply(ldf,'[[',pollutant),na.rm = TRUE)'會拋出一個錯誤。我認爲你也需要和unlist來照顧這個:'mean(unlist(sapply(ldf,'[[',pollutant)),na.rm = TRUE)'。如果我們知道所有文件的長度都是相同的,那麼串聯方式的意思簡單就是單個文件的均值 – dww