使用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的新手,在调用我的函数时仍然远远没有得到任何结果。关于堆栈溢出中的这个课程分配有很多问题和答案,但我对这些交换的评论并没有解决我的代码中的错误。
任何人都有建议如何修复错误?
答案 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个文件)。一些建议: