#r #data.table
#r #data.table
Вопрос:
Я пытаюсь проверить, есть ли у пользователя обновленная версия файла данных о распространенности Covid в Лондоне в их рабочем каталоге, и если нет, загрузите его отсюда:
fileURL <-"https://api.coronavirus.data.gov.uk/v1/data?filters=areaType=region;areaName=Londonamp;structure={"areaType":"areaType","areaName":"areaName","areaCode":"areaCode","date":"date","newCasesBySpecimenDateRollingSum":"newCasesBySpecimenDateRollingSum","newCasesBySpecimenDateRollingRate":"newCasesBySpecimenDateRollingRate"}amp;format=csv"
Вставка этого URL-адреса в браузер загружает файл csv. использование download.file(URL, «data_.csv») создает мусор. Почему?
Пока у меня есть:
library(data.table)
#Look for COVID file starting with "data_"
destfile <- list.files(pattern = "data_")
#Find file date
fileDate<-file.info(destfile)$ctime %>%as.Date()
if(!file.exists(destfile) | fileDate != today()){
res <- tryCatch(download.file(url = fileURL,
destfile = paste0("data_",today(),".csv"),
method = "auto"),
error=function(e) 1)
if(res!=1) COVIDdata<-data.table::fread(destfile) #This doesn't read the file
}
Функция всегда загружает файл независимо от даты в нем, но сохраняет его в нечитаемом формате. Я прибегал к загрузке файла каждый раз следующим образом.
COVIDdata <- data.table::fread(fileURL)
Загружаемый ненужный файл — это:
Комментарии:
1. Условие в вашем
if
предложении -очевидно, всегда даетTRUE
результат — я думаю, причина в том, чтоfileDate
это вектор дат, в котором у вас, кажется, всегда более старые даты.max(fileDate) != today()
может сработать.2. Спасибо за такой быстрый ответ. Я думаю, что самая большая проблема заключается в том, почему загрузка. функция file не сохраняет его в виде файла csv. Я приложил скриншот того, как он выглядит, когда я его открываю.
3. Похоже, на самом деле это не связано с data.table
4. @jangorecki это
download.file
проблема, возможно, заголовки ответов читаются неправильно….
Ответ №1:
Я думаю, что это проблема с кодированием результата download.file
, одним из способов может быть использование fread
для получения данных, а затем их запись с fwrite
:
#Look for COVID file starting with "data_"
destfile <- list.files(pattern = "data_")
#Find file date
fileDate <- file.info(destfile)$ctime %>% as.Date()
#>[1] "2020-11-06" "2020-11-06" "2020-11-06"
if(!length(destfile) | max(fileDate) != today()){
COVIDdata <- fread(fileURL)
fwrite(COVIDdata, file = paste0("data_",today(),".csv"))
}