当然空气污染分配

时间:2015-04-24 21:56:39

标签: r

使用Mac OS 10.10.3 RStudio版本0.98.1103

我的工作目录是332 .csv文件的列表,我正确设置了它。这是代码:

pollutantmean <- function(directory, pollutant, id = 1:332) {
  all_files <- list.files(directory, full.names = T)
  dat <- data.frame()
  for(i in id) {
    dat <- rbind(dat, read.csv(all_files[i]))
  }
  ds <- (dat[, pollutant], na.rm = TRUE)
  mean(ds[, pollutant])
}

部分任务是获得污染物前10个数值的平均值。为此,我使用了调用函数(其中&#34; spectata&#34;是具有332 .csv文件的目录):

pollutantmean(specdata, "Nitrate", 1:10)

我收到的错误消息是:

  

**文件错误(文件,&#34; rt&#34;):无法打开连接

     

**另外:警告信息:在文件中(文件,&#34; rt&#34;):无法打开文件&#39; NA&#39;:没有这样的文件或目录

像许多在这里提出问题的学生一样,我是编程和R的新手,在调用我的函数时仍然远远没有得到任何结果。关于堆栈溢出中的这个课程分配有很多问题和答案,但我对这些交换的评论并没有解决我的代码中的错误。

任何人都有建议如何修复错误?

5 个答案:

答案 0 :(得分:1)

除了其他答案,你可以试试这个:

all_files <- list.files(directory, pattern="*.csv", full.names = TRUE)

避免选择任何其他类型的文件。

甚至是这个奇怪的人

all_files <- paste(directory, "\\", sprintf("%03d", id), ".csv", sep="")

答案 1 :(得分:1)

我花时间回答问题,因为问题会在每次Coursera会议上回来。

首先,请注意拼写错误:请拨打pollutantmean("specdata", "Nitrate", 1:10) 而不是pollutantmean(specdata, "Nitrate", 1:10

然后你的工作目录应该是“specdata”的父目录(例如,如果你的路径是/ dev / specdata,你的工作目录应该是/ dev)。

您可以使用getwd()获取当前工作目录,并使用setwd()设置新工作目录(注意,路径将相对于当前工作目录)。

答案 2 :(得分:0)

all_files <- list.files(directory, full.names = TRUE)之后添加一行(使用T代替TRUE是一个坏习惯):

print(all_files)

然后再次调用您的函数,这样您将看到该对象的内容。然后,检查您使用getwd()的位置。

答案 3 :(得分:0)

修改你的行号。 5到dat <- rbind(dat, read.csv(i, comment.char = "")) 这会将所有csv文件的数据绑定到'dat'数据帧。

答案 4 :(得分:-1)

根据提供的信息,可以假设您指定的目录中没有332个文件(如果有人试图访问超出范围的向量的索引,则返回NA - 因此错误“不能打开文件'NA'“)。这表明您使用的路径(未提供)指向不包含csv文件的目录(假设该目录中确实存在332个文件)。一些建议:

  1. 检查您提供的目录是否准确。只需执行list.files即可查看您正在使用的目录中存在哪些文件。
  2. 使用list.files的pattern参数确保您只阅读csv文件
  3. 使用从list.files返回的向量的长度循环文件,而不是必须手动编码
  4. 您可以添加健全性检查以确保通过打印每个文件来读取所有文件,或者返回包含结果和文件名的列表