Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 创建循环以读取同一目录中的多个csv文件时,文件连接出错_R_Loops - Fatal编程技术网

R 创建循环以读取同一目录中的多个csv文件时,文件连接出错

R 创建循环以读取同一目录中的多个csv文件时,文件连接出错,r,loops,R,Loops,因此,我在R中创建了一个循环,读取名为“specdata”的目录中的多个csv文件,然后告诉您这些文件中某个公共列的平均值。此函数在下一个parragraph中表示。您指定的参数是这些文件所在的目录、要计算的列以及id序列,它告诉您要读取多少文件,具体取决于通过子集[]表示的de对象编号 以下是函数: pollutantmean <- function(directory,pollutant,id) { for (i in id) {archivo <- list.file

因此,我在R中创建了一个循环,读取名为“specdata”的目录中的多个csv文件,然后告诉您这些文件中某个公共列的平均值。此函数在下一个parragraph中表示。您指定的参数是这些文件所在的目录、要计算的列以及id序列,它告诉您要读取多少文件,具体取决于通过子集[]表示的de对象编号

以下是函数:

pollutantmean <- function(directory,pollutant,id) {
     for (i in id) {archivo <- list.files(directory)[i]
    file(archivo[i])
    datapollution <- read.csv(archivo[i],header = TRUE)
    datamatrix <- data.matrix(datapollution)
    mean(datamatrix[pollutant],na.rm = TRUE)}}
它给出以下错误消息:

 Error in file(file, "rt") : cannot open the connection
In addition: Warning message:
In file(file, "rt") :
 Show Traceback

 Rerun with Debug
 Error in file(file, "rt") : cannot open the connection
有趣的是,当调用函数中独立于函数给出错误的部分时,不会发生错误,如下所示:

file(list.files("specdata")[2])
在本例中,它提供了所需的连接,稍后当您应用read.csv(“specdata”)[2]时,它也可以完美地工作

这是我的问题,我错过了什么?它应该像打开子集[2]时一样连接和读取所有文件,但将数字2替换为相应的i,循环函数并使我高兴。为什么它在这里给出了一个错误,但在执行2上的子集时却没有

我在某个地方读到我必须使用Rbind,但无论是哪种方式,都是在生成连接并读取列出的文件之后,我需要在这之前解决第一条警告消息(不确定以后我将如何处理…)


是的,我来自coursera,很抱歉我是个老生常谈的人,但我是一个非常好的人请帮助:)

文件所以它起作用了,只需添加full.names=TRUE,取消文件函数,并在列表的子集上删除i。文件解决了这个问题

  function(directory,pollutant,id) {
  for (i in id) {archivo  <-  list.files(directory,full.names = TRUE)
  datapollution <- read.csv(archivo[i],header = TRUE)
  datamatrix <- data.matrix(datapollution)
  resultmean <- mean(datamatrix[pollutant],na.rm = TRUE)}
  print(resultmean)}
功能(目录、污染物、id){

对于(i in id){archivo,它可能是一个向量的副本,而不是一个列表。它更快,没有其他东西。我还添加了full.names=TRUE选项。它有效吗?是的,有效!谢谢,我想了解:list.files函数的full.names=TRUE参数实际上做什么?为什么没有file()需要函数?是否使用list.files()自动生成连接?
full.names==TRUE
提供完整(而非部分)路径。我不知道您为什么打开空文件。
read.csv
只需要csv文件的路径。您能接受答案吗?
files <- list.files(directory, full.names = TRUE, pattern = ".csv") # be sure your working directoy contains this data

pollutantmean <- function(directory, pollutant, id) {
  for (i in id) {
    datapollution <- read.csv(files[i], header = TRUE, stringsAsFactors = FALSE)
    datamatrix <- data.matrix(datapollution)
    mean(datamatrix[pollutant],na.rm = TRUE)}
}


pollutantmean("specdata",sulfurate,1:15)
  function(directory,pollutant,id) {
  for (i in id) {archivo  <-  list.files(directory,full.names = TRUE)
  datapollution <- read.csv(archivo[i],header = TRUE)
  datamatrix <- data.matrix(datapollution)
  resultmean <- mean(datamatrix[pollutant],na.rm = TRUE)}
  print(resultmean)}