2015-07-04 3 views
2

Я пытаюсь и не в состоянии получить следующий процесс, чтобы завершить в R версии 3.1.2:Invalid «путь» аргумент с XLConnect

library(RCurl) 
library(XLConnect) 
yr <- substr(Sys.Date(), 1, 4) 
mo <- as.character(as.numeric(substr(Sys.Date(), 6, 7)) - 1) 
temp <- tempfile() 
temp <- getForm("http://strikemap.clb.org.hk/strikes/api.v4/export", 
    FromYear = "2011", FromMonth = "1", 
    ToYear = yr, ToMonth = mo, 
    `_lang` = "en") 
CLB <- readWorksheetFromFile(temp, sheet=1) 
unlink(temp) 

я смог вручную экспортировать запрашиваемые данные, установленные и затем прочитать это в R из локального каталога, используя тот же синтаксис readWorksheetFromFile. Теперь моя цель - все это сделать в R. Обращение к API, похоже, работает (thanks to some earlier help), но процесс выходит из строя на следующем этапе, когда я пытаюсь проглотить результаты. Вот что происходит:

> CLB <- readWorksheetFromFile(temp, sheet=1) 
Error in path.expand(filename) : invalid 'path' argument 

Любые мысли о том, что я делаю неправильно или что сломано?

+0

Попробуйте readxl вместо этого – hadley

+0

Я сделал, и я получаю по существу ту же ошибку: 'Ошибка в файле.exists (путь): недопустимый 'file' argument'. – ulfelder

+0

Я думаю, вы ошибочно предположили, что результат 'getForm()' является файлом. – hadley

ответ

0

Оказывается, проблема не связана с XLConnect. Основываясь на кончике Хедли, что мне нужно, чтобы сохранить результаты моего запроса к API в файл, прежде чем читать их обратно в R, мне удалось (почти), чтобы завершить процесс, используя следующий код:

library(httr) 
library(readxl) 
yr <- substr(Sys.Date(), 1, 4) 
mo <- as.character(as.numeric(substr(Sys.Date(), 6, 7)) - 1) 
baseURL <- paste0("http://strikemap.clb.org.hk/strikes/api.v4/export?FromYear=2011&FromMonth=1&ToYear=", yr, "&ToMonth=", mo, "&_lang=en") 
queryList <- parse_url(baseURL) 
clb <- GET(build_url(queryList), write_disk("clb.temp.xlsx", overwrite=TRUE)) 
CLB <- read_excel("clb.temp.xlsx") 

объект, который создает CLB, включает в себя требуемые данные с одним сбой: даты в первом столбце не читаются должным образом. Если я открою «clb.temp.xlsx» в Excel, они появятся в ожидании (например, 2015-06-30 или 6/30/2015, если я нажму на ячейку). Но read_excel() читает их как цифры, которые не отслеживают эти даты очевидным образом (например, 42185 для 2015-06-30). Я попытался исправить это, указав, что они были датами в вызове read_excel, но это вызвало длинную строку предупреждений о ожидании дат, но они получили эти числа.

Если я использую readWorkSheetFromFile() вместо read_excel на этой последней стадии, вот что происходит:

> CLB <- readWorksheetFromFile("clb.temp.xlsx") 
Error in (function (classes, fdef, mtable) : unable to find an inherited method for function ‘readWorksheet’ for signature ‘"workbook", "missing"’ 

Я буду искать решение проблемы с помощью read_excel и создаст новый вопрос, если я не могу найти один.

+0

Я смог преобразовать числа в соответствующие даты в R, используя эту строку кода: 'CLB $ Date <- as.Date (CLB $ Date, format ="% Y-% m-% d ", origin =" 1899-12-30") '. Я понятия не имею, почему эта дата начала работает и должна была выяснить это через пробную версию и ошибку, но это так. – ulfelder

Смежные вопросы