read.csv() 在 R "no lines available in input" 错误

read.csv() in R "no lines available in input" error

我正在尝试遍历目录并读取列表中的所有文件。这些文件都来自此处 https://github.com/CSSEGISandData/COVID-19

的同一个 github 存储库
path = "~/Documents/Corona_Virus/COVID-19/archived_data/archived_daily_case_updates/"
setwd(path)
file.names<-list.files(path)
archived_DAYS<-lapply(file.names,read.csv,sep=",",header=T)

顺利起飞,但随后

path2 = "~/Documents/Corona_Virus/COVID-19/csse_covid_19_data/csse_covid_19_daily_reports/"
setwd(path2)
daily_file_names<-list.files(path2)
daily_DAYS<-lapply(daily_file_names,read.csv,sep=",")

抛出错误

”错误 read.table(file = file, header = header, sep = sep, quote = quote, : 输入中没有可用的行

然而,两个目录中的文件类型都是 .csv 文件,它们的结构都相同。我不明白为什么它会抛出该错误,因为每个文件都填充了数据

要在 R 中本地读取文件,可以执行以下操作。

  1. 在 Github
  2. 中创建 COVID-19 存储库
  3. 将存储库克隆到您要 运行 RStudio / R
  4. 的机器上
  5. 在 RStudio 中,从克隆的 COVID-19 存储库的根目录开始创建一个项目

此时当前的 R 工作目录是克隆的 Github 存储库的根目录。以下代码将检索所有每日存档文件并将它们读入数据框列表。

# 
# archived days data
# 
theFiles <- list.files("./archived_data/archived_daily_case_updates",pattern="*.csv",full.names = TRUE)

dataList <- lapply(theFiles,read.csv,stringsAsFactors=FALSE)

我们可以打印结果列表中第一个数据框的前几行数据,如下所示。

> head(dataList[[1]])
  ï..Province.State Country.Region    Last.Update Confirmed Deaths Recovered Suspected
1             Anhui Mainland China 1/21/2020 10pm        NA     NA        NA         3
2           Beijing Mainland China 1/21/2020 10pm        10     NA        NA        NA
3         Chongqing Mainland China 1/21/2020 10pm         5     NA        NA        NA
4         Guangdong Mainland China 1/21/2020 10pm        17     NA        NA         4
5           Guangxi Mainland China 1/21/2020 10pm        NA     NA        NA         1
6           Guizhou Mainland China 1/21/2020 10pm        NA     NA        NA         1
> 

请注意,list.files() 中的 full.names = TRUE 参数需要将路径包含在结果文件名列表中。

> # show path names in list of files
> head(theFiles)
[1] "./archived_data/archived_daily_case_updates/01-21-2020_2200.csv"
[2] "./archived_data/archived_daily_case_updates/01-22-2020_1200.csv"
[3] "./archived_data/archived_daily_case_updates/01-23-2020_1200.csv"
[4] "./archived_data/archived_daily_case_updates/01-24-2020_0000.csv"
[5] "./archived_data/archived_daily_case_updates/01-24-2020_1200.csv"
[6] "./archived_data/archived_daily_case_updates/01-25-2020_0000.csv"
>

原来的错误是什么导致的post?

原poster在我的回答评论里问为什么每日案例更新的代码失效了。我的假设是子目录中存在 README.md 文件导致 read.csv() 失败。由于我的回答在 list.files() 中使用了 pattern = '*.csv',因此它避免了使用 read.csv() 读取非 csv 文件。

我运行下面的代码来检验这个假设。

# replicate original error
originalDirectory <- getwd()
path2 =paste0(originalDirectory, "/csse_covid_19_data/csse_covid_19_daily_reports")
setwd(path2)
daily_file_names<-list.files(path2)
daily_DAYS<-lapply(daily_file_names,read.csv,sep=",")

我收到了与原始 post 中记录的相同的错误。

> # replicate original error
> originalDirectory <- getwd()
> path2 =paste0(originalDirectory, "/csse_covid_19_data/csse_covid_19_daily_reports")
> setwd(path2)
> daily_file_names<-list.files(path2)
> daily_DAYS<-lapply(daily_file_names,read.csv,sep=",")
Error in read.table(file = file, header = header, sep = sep, quote = quote,  : 
  no lines available in input
> 

pattern = '*.csv' 添加到 list.files() 后,代码可以正常工作。

> # use pattern = "*.csv"
> daily_file_names<-list.files(path2,pattern = "*.csv")
> daily_DAYS<-lapply(daily_file_names,read.csv,sep=",")
> head(daily_DAYS[[1]])
  ï..Province.State Country.Region     Last.Update Confirmed Deaths Recovered
1             Anhui Mainland China 1/22/2020 17:00         1     NA        NA
2           Beijing Mainland China 1/22/2020 17:00        14     NA        NA
3         Chongqing Mainland China 1/22/2020 17:00         6     NA        NA
4            Fujian Mainland China 1/22/2020 17:00         1     NA        NA
5             Gansu Mainland China 1/22/2020 17:00        NA     NA        NA
6         Guangdong Mainland China 1/22/2020 17:00        26     NA        NA
>