R程序不输出

时间:2015-07-19 21:57:10

标签: r

我是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)

}

有人可以提供一些指导 - 调试帮助吗?

当我调整代码时,会出现以下错误:

  • 未找到ID
  • 失踪或意外}(虽然我已将它们全部匹配)。

如果我理解的话,更新后的代码如下:

data <- data.frame();
files <- files[grepl(".csv",files)]

pollutantmean <- function(directory, pollutant, id = 1:332) {
    pollutantmean <- mean(subset1[[pollutant]], na.rm = TRUE);
}

2 个答案:

答案 0 :(得分:0)

看起来你还没有声明ID是什么(我假设:数字向量)?

另外,使用&#39;子集&#39;作为一个变量名,虽然它也是一个函数,而pol作为一个函数名和同一个函数的一个参数的名称只是在寻找麻烦......

我认为有一个缺失&#34;)&#34;在你的for循环中。

修改

所以我现在理解它的方式,你想做几件事。

  1. 读入一堆文件,您将多次使用这些文件而不更改它们。
  2. 在不同条件下从这些文件中获取一些平均值。
  3. 这是我将如何做到的。

    1. 由于您只想读取一次数据,因此您不需要执行此操作的功能(您可以拥有一个功能,但我认为现在这样做太过分了)。您正确拥有使用文件名生成向量的代码,然后遍历它们,将它们相互绑定。问题是这会变得很慢。检查here。确保您的目录 only 包含您要读入的文件,因此没有Rscripts或其他内容。一种方法(不是100%万无一失)使用files <- files[grepl(".csv",files)],这确保你只有csv&#39;(grepl检查某个字符串是否是另一个字符串的子字符串,并返回一个布尔值[]然后只保留返回TRUE的元素。

    2. 接下来,你想做多次&#39;,即取出平均值。这是您使用某个功能的地方。显然,您希望获得不同类型污染的平均值,并且您希望在限制ID中使用它。 让我们假设1.为您提供了一个数据框df,其中包含一个名为Type的列用于污染类型,另一列名为Id,它以某种方式表示一种ID(用脚本中的实际名称替换 - 如果您没有ID列,我稍后会编辑答案)。现在你想要一个功能

      polmean <- function(type, id) { 
         # some code that returns the mean of a restricted version of df 
      }
      
    3. 这就是你所需要的。您编写生成df的代码,然后编写一个函数,从您的数据帧中获取您想要的内容,然后根据您想要使用它的情况调用它(最后的三个polmean调用)原始代码,但现在没有第一个参数,因为你不再需要这个)。

答案 1 :(得分:0)

好的 - 我终于解决了这个问题。谢谢你的帮助。

  1. 我不需要在第2行调用“specdata”。第1行中的目录引用了正确的目录。
  2. 我的for / in语句需要引用第一行中的id而不是数据集中的ID。 for / in语句似乎不需要缩进(但看起来更干净)
  3. 我不需要子集
  4. 污染物的最后3行不需要成为该计划的一部分。这些在R控制台中用于逐个调用结果。