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