我是 R 的新手。我创建了下面的函数来计算 332 个 csv 文件中包含的数据集的平均值。寻求有关如何改进此代码的建议。运行需要 38 秒,这让我觉得效率不高。
pollutantmean <- function(directory, pollutant, id = 1:332) {
files_list <- list.files(directory, full.names = TRUE) #creats list of files
dat <- data.frame() #creates empty dataframe
for(i in id){
dat<- rbind(dat,read.csv(files_list[i])) #combin all the monitor data together
}
good <- complete.cases(dat) #remove all NA values from dataset
mean(dat[good,pollutant]) #calculate mean
} #run time ~ 37sec - NEED TO OPTIMISE THE CODE
最佳答案
无需每次使用 for 循环
创建 void data.frame
和 rbind
,您可以存储所有 数据。 frames
在列表中并将它们组合成一个镜头。您还可以使用均值函数的 na.rm
选项来不考虑 NA
值。
pollutantmean <- function(directory, pollutant, id = 1:332)
{
files_list = list.files(directory, full.names = TRUE)[id]
df = do.call(rbind, lapply(files_list, read.csv))
mean(df[[pollutant]], na.rm=TRUE)
}
可选 - 我会使用 magrittr
提高可读性:
library(magrittr)
pollutantmean <- function(directory, pollutant, id = 1:332)
{
list.files(directory, full.names = TRUE)[id] %>%
lapply(read.csv) %>%
do.call(rbind,.) %>%
extract2(pollutant) %>%
mean(na.rm=TRUE)
}
关于r - 我怎样才能改进这个R函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29729725/