r - 我怎样才能改进这个R函数

标签 r

我是 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.framerbind,您可以存储所有 数据。 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/

相关文章:

r - 使用 ggplot2 左对齐 geom_text 图层

r - 保存/导出 ggplot2 数据,而不是绘图本身

r 中参数数量可变的回归函数

r - HighcharterR : plotband and plotline not working

r - 如何从 dygraph 中保存交互式图表

r - 在r中使用grep或grepl根据列的第一个字母选择列

r - 不同分类器的 TPR 和 FPR 曲线 - R 中的 kNN、朴素贝叶斯、决策树

java - runAndReturnResult 处的 rcaller IOException

r - 计算 R 中大矩阵的零空间

android - Google Speech API示例,无法解析R