如何将R函数参数传递给列的子集

如何将R函数参数传递给列的子集,r,function,R,Function,首先,我是新来的,这是我的第一篇帖子,如果我做的每件事都不正确,我会提前道歉。我确实花了时间先四处搜索,但找不到我要找的东西。 第二,我很确定我违反了一条规则,因为这个问题与我正在学习的“coursera.org”R编程课程有关(这是作业的一部分),但截止日期已经过了,我现在失败了,我将在下个月重复这个主题,然后再试一次,但我现在正在努力找出哪里出了问题 下面是我的代码: 我试图做的是从一系列文件中读取数据。这些文件有四列宽,标题为:日期、硝酸盐、硫酸盐和id,包含各种数据行 我尝试编写的函数应

首先,我是新来的,这是我的第一篇帖子,如果我做的每件事都不正确,我会提前道歉。我确实花了时间先四处搜索,但找不到我要找的东西。 第二,我很确定我违反了一条规则,因为这个问题与我正在学习的“coursera.org”R编程课程有关(这是作业的一部分),但截止日期已经过了,我现在失败了,我将在下个月重复这个主题,然后再试一次,但我现在正在努力找出哪里出了问题

下面是我的代码: 我试图做的是从一系列文件中读取数据。这些文件有四列宽,标题为:日期、硝酸盐、硫酸盐和id,包含各种数据行

我尝试编写的函数应包含文件目录、污染物(硝酸盐或硫酸盐)和编号文件集的参数,例如文件1和2、文件1到4等。函数的返回值应为选定文件中选定污染物的平均值

我会使用这样的调用调用函数

pollutantmean("datafolder", "nitrate", 1:3)
返回值应该是一个数字,这是数据文件1到3中硝酸盐的平均值

好的,我希望我已经提供了足够的信息。其他可能有用的东西是:

  • 操作系统:Ubuntu
  • 语言:R
  • 收到错误消息:

    警告信息: 在is.na(x)中:is: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)

pollutantmean如果在对象中传递列名,则不能使用
$
运算符进行子集,如示例中所示(列名存储在
pollutant
中)。因此,请尝试使用
[]
进行子集划分,在您的情况下:

median(dat_subset[,pollutant], na.rm = TRUE)


这行吗?

您是否验证了
dat\u subset
是否有行?您应该进行搜索。整个星期都在出现。:)Richard,是的,我并不感到惊讶,我很抱歉,因为我说我是一个非常新的人,我确实尝试过先搜索,但找不到我想要的答案(正如我在笔记中看到的,这是一个规则)-问题是我真的不知道搜索什么。我对这个问题的出现并不感到惊讶,因为它是目前正在进行的coursera课程的一部分——再次表示歉意。初学者,非常感谢你的回答——是的,确实有效。我非常感谢你的帮助。此外,函数调用中的子集将使调用速度减慢到
median
down。这是332个文件中的一个,对吗?
median(dat_subset[[pollutant]], na.rm = TRUE)