在 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 邮件列表中发送建议或希望的功能。
我一直在尝试使用 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 邮件列表中发送建议或希望的功能。