假设一个目录有100个文件。我应该如何通过R代码打开50-60范围内的文件? 我尝试使用for循环但是如何通过for循环打开名为50,51,52 ... 60的文件?
写一个名为' pollutantmean'的函数。计算指定监视器列表中污染物(硫酸盐或硝酸盐)的平均值。功能“污染物”'有三个参数:'目录','污染物'和' id'。给定矢量监视器ID号,'污染物量'读取监视器'来自'目录中指定目录的颗粒物质数据'参数并返回所有监视器中污染物的平均值,忽略编码为NA的任何缺失值。
答案 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
}