Я пытаюсь «зациклить» функцию (то есть функцию getComtrade () , написанную Стефаном Ангриком) над списком уникальных идентификаторов страны, а затем добавить результат в большой `data.frame 'объект для будущего использования.Задача может быть разбита на следующие шаги:
- цикл по уникальному идентификатору страны в
country_code
(в цифрах) - извлечение двусторонних торговых потоков каждого идентификатора с остальным миромв конкретном году, используя
get.Comtrade()
-> d
- для каждого идентификатора (
i
), поднабор соответствующих столбцов из d
- и добавление поднабора результатов из шага 3 кбольшой кадр данных ->
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'
, что может означать, что веб-сервер не может обработать запрошенный объем информации.
В качестве альтернативы я попытался удалить шаги 3 и 4 из for-loop
и зацикливание на меньшем подмножестве идентификатора страны вместо этого, но результирующий df
всегда с выводом (d
) предыдущего идентификатора страны будет записан поверх следующей записи идентификатора страны, так что конечный d
всегдабудучи Зимбабве (последняя страна из моего списка стран в алфавитном порядке).
Я задавал аналогичный вопрос в другой форме почти два года назад, но не смог получить никаких существенных ответов.Буду очень признателен, если кто-нибудь сможет пролить свет на это.