我正在尝试在唯一国家/地区ID列表上“循环”一个函数(例如,由Stefan Angrick编写的getComtrade()函数),然后将结果附加到大的“ data.frame”中对象以备将来使用。 该任务可以分解为以下步骤:
country_code
中的唯一国家/地区ID(以数字表示)get.Comtrade()
-> d
i
),来自d
的子集相关列df_total
这是我到目前为止所得到的:
###connect to UN Comtrade data###
library(rjson)
string <- "http://comtrade.un.org/data/cache/partnerAreas.json"
reporters <- fromJSON(file=string)
reporters <- as.data.frame(t(sapply(reporters$results,rbind)))
###get WTO member comtrade code reference list (source from my own list)###
library(foreign)
### from my own Dropbox folder ###
link <- "https://www.dropbox.com/s/8cihsafxab5riep/tariff_rates.csv?dl=1"
dat <- read.csv(link)
### subsetting a list of eligible countries from dat ###
inds <- subset(reporters, reporters$V1 %in% dat[,3])
### require Stefan Angrick's get.Comtrade() function###
install.packages("comtrade.tar.gz", repos = NULL, type = "source")
library(comtrade)
country_code <- as.numeric(unlist(inds[,1]))
df_total = data.frame()
## step 1 ##
for (i in unique(country_code)){
## step 2 ##
d <- get.Comtrade(r=toString(i), p="all", ps="2006", type="C", rg="2", freq="A")
df <- data.frame(d$data)
## step 3 ##
df <- cbind(d$data[2], d$data[10], d$data[13], d$data[32])
## step 4 ##
df_total <- rbind(df_total,df)
}
df_total
但是结果表明409 Conflict
Error in file(con, "r") : cannot open the connection
In addition: Warning message:
In file(con, "r") :
cannot open URL 'http://comtrade.un.org/api/get?max=50000&type=C&freq=A&px=HS&ps=2006&r=558&p=all&rg=2&cc=TOTAL&fmt=json': HTTP status was '409 Conflict'
这可能意味着Web服务器无法处理我请求的信息量。
或者,我尝试从for-loop
中删除第3步和第4步,并循环遍历国家ID的较小子集,但是结果df
始终具有输出(d
)的上一个国家/地区ID由下一个国家/地区ID覆盖,因此最后一个d
始终是津巴布韦(我的国家/地区列表中的最后一个国家(按字母顺序)。
近两年前,我在different form问过类似的问题,但没有收到任何实质性答复。如果有人能对此有所启发,我将不胜感激。