在 R 中读取 SDMX - 解析错误?

Reading SDMX in R - parse error?

我一直在尝试使用 INEGI(墨西哥统计局)数据通过他们最近启动的 SDMX 服务在 R 中开发一个闪亮的应用程序。我甚至亲自联系了开发人员,他们给了我以下不可行的代码:

require(devtools) 
require(RSQLite)
require(rsdmx)
require(RCurl)

url <- paste("http://www.snieg.mx/opendata/NSIRestService/Data/ALL,DF_PIB_PB2008,ALL/ALL/INEGI");
sdmxObj <- readSDMX(url)

df_pib <- as.data.frame(sdmxObj)

这给我带来了以下错误:

sdmxObj <- readSDMX(url)
 Opening and ending tag mismatch: ad line 1 and Name
 Opening and ending tag mismatch: b3 line 1 and Name
 Opening and ending tag mismatch: b3 line 1 and Department
 Opening and ending tag mismatch: c3 line 1 and Contact
 Opening and ending tag mismatch: a1 line 1 and Sender
 Opening and ending tag mismatch: c3 line 1 and Header
 Opening and ending tag mismatch: b3 line 1 and GenericData

...等等,你明白了。

我尝试使用另一个 url(也许这太宽泛了,引入了每个 GDP 衡量指标),但我得到了相同的结果:

url<-"http://www.snieg.mx/opendata/NSIRestService/Data/ALL,DF_PIB_PB2008,ALL/.MX.........C05.......0101/INEGI?format=compact"

如果我直接用浏览器下载文件,我似乎得到了有用的结构。

有什么想法吗?这看起来像是直接来自源代码的错误定义还是包的问题"rsdmx",如果是这样,有没有人找到正确解析类似结构的方法?

你可以试试 RJSDMX

要下载 DF_PIB_PB2008 数据流的所有时间序列,您只需点击:

library(RJSDMX)
result = getSDMX('INEGI', 'DF_PIB_PB2008/.................')

或等同于:

result = getSDMX('INEGI', 'DF_PIB_PB2008/ALL')

如果您因此需要时间序列,您就大功告成了。另外,如果你喜欢 data.frame,你可以调用它:

dfresult = sdmxdf(result, meta=T)

您可以在项目中找到有关包及其配置的更多信息wiki

您在上面粘贴的代码,使用 rsdmx,工作得很好。正如您正确判断的那样,您遇到的问题是关于工作场所防火墙的。

你只需要加载rsdmx包(其他包不需要显式声明)

require(rsdmx)

并执行此代码:

url <- paste("http://www.snieg.mx/opendata/NSIRestService/Data/ALL,DF_PIB_PB2008,ALL/ALL/INEGI");
sdmxObj <- readSDMX(url)
df_pib <- as.data.frame(sdmxObj)

我已经检查过与此数据源相关的任何潜在问题,但没有。严格保持在您的 post 范围内,您的代码没问题。

话虽如此,如果您发现rsdmx中存在错误,您可以直接在https://github.com/opensdmx/rsdmx/issues提交工单,为用户提供及时的反馈。您也可以在那里或在 rsdmx 邮件列表中发送建议或希望的功能。