我是R的新手,编程并参加Coursera课程。我在他们的论坛上问过,但似乎没有人能在论坛中提供答案。为了清楚起见,我试图确定为什么不输出。
当我第一次编写程序时,我得到了准确的输出,但是在我尝试上传之后,出现了一些问题。当我从RStudio运行程序时,不是用[1],[2]等产生任何输出,我只得到蓝色+++,但没有错误,我改变的任何东西仍然不会产生输出。
我尝试使用之前版本的R,并重新安装了适用于Windows的最新版本3.2.1。
我做了什么: 通过RStudio
设置正确的工作目录pol <- function(directory, pol, id = 1:332) {
files <- list.files("specdata", full.names = TRUE);
data <- data.frame();
for (i in ID) {
data <- rbind(data, read.csv(files_list[i]))
}
subset <- subset(data, ID %in% id);
polmean <- mean(subset[pol], na.rm = TRUE);
polmean("specdata", "sulfate", 1:10)
polmean("specdata", "nitrate", 70:72)
polmean("specdata", "nitrate", 23)
}
有人可以提供一些指导 - 调试帮助吗?
当我调整代码时,会出现以下错误:
如果我理解的话,更新后的代码如下:
data <- data.frame();
files <- files[grepl(".csv",files)]
pollutantmean <- function(directory, pollutant, id = 1:332) {
pollutantmean <- mean(subset1[[pollutant]], na.rm = TRUE);
}
答案 0 :(得分:0)
看起来你还没有声明ID是什么(我假设:数字向量)?
另外,使用&#39;子集&#39;作为一个变量名,虽然它也是一个函数,而pol作为一个函数名和同一个函数的一个参数的名称只是在寻找麻烦......
我认为有一个缺失&#34;)&#34;在你的for循环中。
修改强>
所以我现在理解它的方式,你想做几件事。
这是我将如何做到的。
由于您只想读取一次数据,因此您不需要执行此操作的功能(您可以拥有一个功能,但我认为现在这样做太过分了)。您正确拥有使用文件名生成向量的代码,然后遍历它们,将它们相互绑定。问题是这会变得很慢。检查here。确保您的目录 only 包含您要读入的文件,因此没有Rscripts或其他内容。一种方法(不是100%万无一失)使用files <- files[grepl(".csv",files)]
,这确保你只有csv&#39;(grepl
检查某个字符串是否是另一个字符串的子字符串,并返回一个布尔值[]
然后只保留返回TRUE
的元素。
接下来,你想做多次&#39;,即取出平均值。这是您使用某个功能的地方。显然,您希望获得不同类型污染的平均值,并且您希望在限制ID中使用它。
让我们假设1.为您提供了一个数据框df
,其中包含一个名为Type
的列用于污染类型,另一列名为Id
,它以某种方式表示一种ID(用脚本中的实际名称替换 - 如果您没有ID列,我稍后会编辑答案)。现在你想要一个功能
polmean <- function(type, id) {
# some code that returns the mean of a restricted version of df
}
这就是你所需要的。您编写生成df
的代码,然后编写一个函数,从您的数据帧中获取您想要的内容,然后根据您想要使用它的情况调用它(最后的三个polmean调用)原始代码,但现在没有第一个参数,因为你不再需要这个)。
答案 1 :(得分:0)
好的 - 我终于解决了这个问题。谢谢你的帮助。