使用OECD包v0.2.4获取迁移数据时遭遇HTTP 400错误的求助
OECD包v0.2.4获取迁移数据时遭遇HTTP 400错误的求助
看起来你遇到的HTTP 400错误是请求格式不符合OECD API要求导致的,大概率是filter参数的写法出了问题。我来帮你一步步排查解决:
首先得明确:OECD包的get_dataset函数要求filter参数是一个命名列表,列表的名称必须严格对应数据集的维度名称,你现在直接传了一个未命名的向量,API没法识别这个筛选条件对应哪个维度,所以返回了400错误。
具体解决步骤:
先确认数据集的维度名称
运行下面的代码查看DIOC_CITIZEN_AGE的维度结构,搞清楚你要筛选的FYUG-MKD对应哪个维度(比如公民身份、来源国等):# 查看所有维度的详细信息 str(dstruc) # 或者单独查看某类维度,比如公民身份维度 print(dstruc$CITIZEN)你会看到类似
CITIZEN、COUNTRY、AGE这样的维度名称,筛选条件必须和这些名称对应。修正filter_list的格式
把你的filter_list改成命名列表,比如如果FYUG-MKD是公民身份的代码,就写成:filter_list <- list(CITIZEN = c("FYUG-MKD"))这样API就能明确知道你要筛选
CITIZEN维度下的FYUG-MKD数据。验证代码是否有效
有时候错误也可能是因为FYUG-MKD这个代码在对应维度下不存在,你可以运行下面的代码检查:# 获取CITIZEN维度的所有有效代码 valid_codes <- dstruc$CITIZEN$id print(valid_codes) # 检查你的代码是否在有效列表里 "FYUG-MKD" %in% valid_codes如果返回
FALSE,说明你用的代码不对,需要换成正确的代码。调整时间参数(可选)
部分版本的OECD包对时间参数的格式要求是字符串,你可以尝试把start_time和end_time改成字符串格式:start_time = "2010", end_time = "2020"
修正后的完整代码示例:
library(OECD) dataset <- "DIOC_CITIZEN_AGE" dstruc <- get_data_structure(dataset) # 按维度名称设置命名筛选列表 filter_list <- list(CITIZEN = c("FYUG-MKD")) # 获取数据 data.migration <- get_dataset(dataset = dataset, filter = filter_list, start_time = "2010", end_time = "2020") head(data.migration)
按照这个步骤调整后,应该就能解决HTTP 400的错误了。如果还是不行,可以检查一下网络连接,或者确认OECD API是否临时维护。
备注:内容来源于stack exchange,提问作者silent_hunter
相关产品推荐
相关产品推荐

