文件(file)出错:无法打开连接 - 无法打开文件'specdata',访问被拒绝。

5

我在Windows 7上运行rStudio v3.1.2。这台笔记本是一台64位机器。

我正在参加由Coursera提供的JHU R编程课程,卡在了问题的第一部分收到的错误上。我有一些错误处理函数不包含在此示例中,所以我真的只想展示我绝对需要的内容。我包括消息的唯一原因是为了证明所有条件必须满足才能继续。

  pollutantmean <- function(directory, pollutant, id=1:332) {

  setwd("C:\\Users\\WR-eSUB\\specdata")

  if(!isValidDirectory(directory)) {
        stop("Invalid input given.  Please specify valid directory to operate on.")
  }
  if(!isValidPollutant(pollutant)) {
        stop("Invalid input given.  Please specify valid pollutant (nitrate/sulfate).")
  }
  if(!isValidIdRange(id)) {
        stop("Invalid input given.  Please specify valid id range (1:332).")
  }
  sortedData = numeric()
  for (i in id) {
        thisFileName = paste(formatC(i, width = 3, flag = "0"), ".csv", sep="")
        thisFileRead = read.csv(directory, thisFileName)
        sortedData = c(sortedData, thisFileRead[[pollutant]])
  }
  mean(sortedData, na.rm = TRUE)
}

请注意,在WR-eSUB内有一个名为specdata的文件夹,而在该文件夹内有包含.csv文件的目录,也称为specdata。我可以更改它,但到目前为止,我一直在使用它,并且没有遇到任何问题。
当我调用pollutantmean("specdata", "nitrate", 1:2)时,我会收到以下错误消息:
 Error in file(file, "rt") : cannot open the connection 
 In addition: Warning message: In file(file, "rt") : cannot open file 'specdata': Permission denied

现在,在我多次尝试完成这一部分作业时,我已经能够使用诸如lapply之类的其他方式提取数据,但因为我一直卡在那里,所以我把所有东西都扔了,想尝试这种方法。

我搜索了网络以寻找这个解决方案。尽管有几个已回答的问题,但没有一个像这个问题一样令人困惑。WR-eSUB是一个管理文件夹,但以前打开其中的文件的尝试并没有产生过这个错误。


1
那么,它是 C:/Users/WR-eSUB/specdata/specdata/*.csv 吗? - user3710546
2
如果我的问题不够清晰,或者我看起来有些懒散,我很抱歉。说实话,我真的筋疲力尽了,如果你要给我投反对票,至少请解释一下原因,这样我就不会再犯同样的错误了。 - ASwiftPeregrine
list.files("C:\\Users\\WR-eSUB\\specdata") 的输出是什么? - user3710546
"specdata"是答案。就是这样。我知道这很冗余,但在我的其他实现中,这一点都运行得很好,所以我从来没有去改变它。如果你认为有必要,我会去做的,但是只要保持它原来的样子,我就能够获取可用的数据。 - ASwiftPeregrine
3个回答

3

好好睡了一晚后,我看到问题所在。我根本没有使用目录,所以需要添加它。

thisFileName = paste(directory, "/", formatC(i, width = 3, flag = "0"), ".csv", sep="")

1

这一行将失败:

read.csv(directory, thisFileName)

因为,对于?read.csv的一个粗略的查看会告诉你,该函数的第一个参数是:

file: the name of the file which the data are to be read from.
      Each row of the table appears as one line of the file.  If it
      does not contain an _absolute_ path, the file name is
      _relative_ to the current working directory, ‘getwd()’.
      Tilde-expansion is performed where supported.  This can be a
      compressed file (see ‘file’).

您正在传递directory参数(如您所示的调用中的specdata)给它。

考虑到setwd()已经将您放置在该目录中,是否不需要传递该参数呢?

read.csv(theFileName)

工作?


我最初的尝试实际上是将那一行读成这样,但是然后我会得到完全相同的第一个错误消息,而第二个错误消息会变成“另外:警告消息:在文件(文件,“rt”)中:无法打开文件'001.csv':没有这样的文件或目录”。 - ASwiftPeregrine
抱歉,我应该早点提到我已经尝试过了。当我在帮助手册或调试之后找不到解决方案时,我会开始在调试模式下进行暴力试错。不过我必须承认,我的调试经验仅限于使用eclipse的Java,并不太擅长使用rStudio:/ - ASwiftPeregrine

0

我在2018年从Coursera学习R编程。我知道这个问题已经发布了3年,但如果有人想知道,我仍然喜欢发布。

我也遇到了同样的问题,但在阅读了这个链接之后,我知道我们需要指定文件夹的位置以及文件夹中的文件。所以我加入了这段代码:

folder<- "C:\\Users\\PHD\\Documents\\specdata"
file_list <- list.files(path=folder, pattern="*.csv")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接