【发布时间】:2015-11-05 16:10:15
【问题描述】:
我正在学习 coursera R 编程课程。我正在做的作业问题如下:
编写一个名为“pollutantmean”的函数,计算指定监视器列表中污染物(硫酸盐或硝酸盐)的平均值。函数“pollutantmean”接受三个参数:“directory”、“pollutant”和“id”。给定一个向量监视器 ID 号,“pollutantmean”从“目录”参数中指定的目录中读取该监视器的颗粒物数据,并返回所有监视器中污染物的平均值,忽略编码为 NA 的任何缺失值。
这个问题的数据集在这里: https://d396qusza40orc.cloudfront.net/rprog%2Fdata%2Fspecdata.zip
我得到的第一个循环的答案是 3.8383,而第二个循环的正确答案是 4.064。由于 iv 在第一个函数中完成的子集化,我无法找到发生的差异。我的调试说它应该在函数 1 中完成的子集后给出与函数 2 中出现的相同的行数。但有些不同。
功能1
pollutantmean<-function(directory, pollutant, id=1:332){
file_list<-list.files(directory, full.names=TRUE)
dat<-data.frame()
mean_select_pol<-c()
for(i in 1:332){
dat<- rbind(dat, read.csv(file_list[i]))
}
select_pol<-dat[which(dat[,"ID"]==id), ]
mean_select_pol<-mean(select_pol[, pollutant], na.rm=TRUE)
mean_select_pol
}
功能2
pollutantmean <- function(directory, pollutant, id = 1:332) {
files <- list.files(directory, full.names=TRUE)
dat <- data.frame()
for(i in id)
{
dat <- rbind(dat, read.csv(files[i]))
}
mean_data <- mean(dat[,pollutant], na.rm = TRUE)
round(mean_data, digits=3)
}
【问题讨论】:
-
是的,但我没有得到答案,所以我不得不发布它。我在学习阶段,没有得到答案是信心破灭。
-
好的,感谢您的澄清。
-
Akrun 你能看看它并帮助我解决这个问题吗?
-
正确的做法是编辑您的原始问题以清楚起见,然后请求重新打开它。
-
这条线应该做什么?
select_pol<-dat[which(dat[,"ID"]==id), ]
标签: r for-loop functional-programming