我正在为Coursera的r编程课程做作业。我有一个目录,其中包含332个监视器的天气数据读数。对4个变量进行了172,385次观测。变量或日期,硫酸盐,硝酸盐和监测ID。我已经编写了下面的函数并使其工作,但它没有返回正确的值。这是我第一次真正的编程经验,这是一个家庭作业,所以我只是在寻找关于我做错的提示或建议。
这是我的功能:
polutantmean14 <- function(directory, polutant = "nitrate", id = 1:332) {
files_list <- list.files(directory, full.names = TRUE)
dat <- data.frame()
for ( i in 1:332) {
dat <- rbind(dat, read.csv(files_list[i]))
}
dat_subset <- dat[which(dat[, "ID"] == id), ]
mean(dat_subset[, polutant], na.rm= TRUE)
}
这是我得到的错误:
polutantmean14(“specdata”,polutant =“sulfate”,id = 1:10)
[1] 3.838328
警告讯息: 在dat [,“ID”] == id: 较长的物体长度不是较短物体长度的倍数
该函数返回3.838328,但对于给定的参数,我应该得到4.064。
就像我之前提到的,我是编程的新手,这是家庭作业所以我真的只是在寻找关于我的错误所在的建议和指导。
答案 0 :(得分:0)
您正在将长度为332的向量与长度为10的向量进行比较。
R(与MATLAB不同)将允许您比较不同长度的矢量,但如果较长的矢量长度不是较短长度的倍数,则会发出警告。那就是mod(length(longerVec),length(shorterVec)) != 0
长话短说:重新思考并重写代码。 ; - )
答案 1 :(得分:0)
尝试使用%in%
代替==
。