在R中打开文件

时间:2014-12-15 07:10:02

标签: r file directory

假设一个目录有100个文件。我应该如何通过R代码打开50-60范围内的文件? 我尝试使用for循环但是如何通过for循环打开名为50,51,52 ... 60的文件?

写一个名为' pollutantmean'的函数。计算指定监视器列表中污染物(硫酸盐或硝酸盐)的平均值。功能“污染物”'有三个参数:'目录','污染物'和' id'。给定矢量监视器ID号,'污染物量'读取监视器'来自'目录中指定目录的颗粒物质数据'参数并返回所有监视器中污染物的平均值,忽略编码为NA的任何缺失值。

2 个答案:

答案 0 :(得分:1)

假设文件位于working directory

pollutantmean <- function(pathtodirectory, pollutant, id=1:332){
    files <- sprintf('%s/%03d.csv', pathtodirectory,id)
    lst <- vector('list', length(id))
    m1 <- vector('numeric', length(id))
     for(i in seq_along(lst)){
      lst[[i]] <- read.csv(files[i])
       if(pollutant=='sulfate'){
         m1[i] <- mean(lst[[i]]$sulfate, na.rm=TRUE)
       }

       if(pollutant=='nitrate'){
          m1[i] <- mean(lst[[i]]$nitrate, na.rm=TRUE)
         }
       }
    return(list(m1, mean(m1)))          
 }       


pollutantmean(getwd(), 'nitrate',1:5)
pollutantmean(getwd(), 'sulfate',1:5)[[1]]

答案 1 :(得分:0)

以下是我在学习该课程时如何解决问题:

pollutantmean <- function(directory=getwd(), pollutant, id = 1:332) {
  filetotals <- 0
  observationnumber <- 0
  for(i in id) {
    csvfile <- sprintf("%03d.csv", i)
    filepath <- file.path(directory, csvfile)
    readcsvfile <- read.csv(filepath)
    justpollutant <- readcsvfile[[pollutant]]
    purepollutant <- justpollutant[!is.na(justpollutant)]
    observationnumber <- observationnumber + length(purepollutant) 
    sumpollutant <- sum(purepollutant)
    filetotals <- filetotals + sumpollutant
  }
  print(filetotals)
  print(observationnumber)
  filetotals / observationnumber
}