我正在尝试并且未能在R版本3.1.2中完成以下过程:
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)
我已经能够手动导出所请求的数据集,然后使用相同的readWorksheetFromFile语法从本地目录中将其读入R.我现在的目标是在R中执行整个操作。对API的调用似乎有效(thanks to some earlier help),但是当我尝试摄取结果时,该过程在下一步失败。这里发生了什么:
> CLB <- readWorksheetFromFile(temp, sheet=1)
Error in path.expand(filename) : invalid 'path' argument
关于我做错了什么或者什么坏了?
答案 0 :(得分:0)
事实证明,XLConnect根本没有问题。基于Hadley的提示,我需要将查询结果保存到文件中,然后再将其读回到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包含带有一个小故障的所需数据:第一列中的日期未正确读取。如果我打开&#34; clb.temp.xlsx&#34;在Excel中,它们按预期显示(例如,如果我单击单元格,则为2015-06-30或2015年6月30日)。但read_excel()
正在将这些数字视为不能以明显方式跟踪这些日期的数字(例如,2015-06-30为42185)。我尝试通过指定它们是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搜索问题的解决方案,如果找不到,我会创建一个新问题。