首先我是新来的,这是我的第一篇文章,所以如果我没有做正确的事,我会提前道歉。我确实花时间先搜索一下但找不到我要找的东西。 其次,我很确定我违反了规则,因为这个问题与我正在进行的'coursera.org'R编程课程有关(这是作业的一部分)但截止日期已经过去,我现在已经失败了,我将在下个月重复这个话题,然后再试一次,但我现在正处于损害控制中,试图找出问题所在。
以下是我的代码: 我想要做的是从一系列文件中读取数据。这些文件是四列宽的标题:日期,硝酸盐,硫酸盐和id,包含各种数据行。
我试图写的函数应该取文件目录的参数,污染物(硝酸盐或硫酸盐)和编号文件集,例如:文件1和2,文件1到4等。函数的返回应该是所选文件中所选污染物的平均值。
我会使用像这样的调用来调用函数
pollutantmean("datafolder", "nitrate", 1:3)
并且返回应该只是一个数字,这是数据文件1到3中硝酸盐的平均值
好的,我希望我提供了足够的信息。其他可能有用的东西是:
收到错误讯息:
警告讯息: 在is.na(x)中:是:na()应用于'NULL'类型的非(列表或向量)
正如我所说,数据文件是位于文件夹中的一系列文件,四列宽,并且行数不同。
我的功能代码如下:
pollutantmean <- function(directory, pollutant, id = 1:5) { #content of the function
#create a list of files, a vector I think
files_list <- dir(directory, full.names = TRUE)
# Now create an empty data frame
dat <- data.frame()
# Next step is to execute a loop to read all the selected data files into the dataframe
for (i in 1:5) {
dat <- rbind(dat, read.csv(files_list[i]))
}
#subsets the rows matching the selected monitor numbers
dat_subset <- dat[dat[, "ID"] == id, ]
#identify the median of the pollutant and ignore the NA values
median(dat_subset$pollutant, na.rm = TRUE)
好吧,就是这样,通过反复试验,我很确定最后一行代码“median(dat_subset$pollutant, na.rm = TRUE)
”似乎是个问题。我将一个论点传递给污染物的功能,该功能应该是硫酸盐或硝酸盐,但似乎dat_subset$pollutant
代码的代码是不起作用的。不知怎的,我得到的污染物参数不会进入函数体。理想情况下,dat_subset$pollutant
位应该等同于dat_subset$nitrate
或dat_subset$sulfate
,具体取决于提供给函数的参数。
答案 0 :(得分:1)
如果您在对象中传递列名称(如果它存储在$
中),则不能使用pollutant
运算符进行子集化。因此,尝试使用[]
进行子集,在您的情况下将是:
median(dat_subset[,pollutant], na.rm = TRUE)
或
median(dat_subset[[pollutant]], na.rm = TRUE)
这有用吗?