r语言 - 是否有一种方法来组合一个潜在的无限列表集?



下面的脚本从联合国的API中提取一些特定的国家数据。我创建了一个for循环来帮助用户从数据库中提取多个国家的情况。我正在努力解决的问题是在for循环之后,我从"data"元素在"response"向量(响应元数据)。我目前正在使用rbind()对多个列表进行分组,但希望找到一个解决方案来解释潜在的无限数量的列表,而不必手动写出每个列表。

library(jsonlite)
library(httr)
base_url <- "https://population.un.org/dataportalapi/api/v1/data"
locationlist <- list("528","40","620") # example list of country codes
target <- list()
response <- list()
for (i in locationlist) {

target[[i]] <- paste0(base_url, "/indicators/",65,"/locations/",i,"/start/",2000,"/end/",2019) # url
response[[i]] <- fromJSON(target[[i]]) # call API

}
# Here's the main issue :
df <- rbind(response[[1]]$data,response[[2]]$data,response[[3]]$data) # combine lists

我试过在for循环中加入rbind(),但没有成功。

每个response元素都是一个list,我们只需要提取data元素。因此,循环response(这是一个list),使用[[$来提取"数据"部分,它返回data.frames的list,可以用do.callrbind进行编辑

out <- do.call(rbind, lapply(response, `[[`, "data"))

与产出

> dim(out)
[1] 60 32

或者使用tidyverse

library(purrr) # version 1.0.0
library(dplyr)
out <- map(response, pluck, "data") %>%
list_rbind
#or may also use
out <- map_dfr(response, pluck, "data")

可以在lapplymap中完成,而不是在for循环中执行此操作

library(stringr)
urls <- str_c(base_url, "/indicators/",65,"/locations/",
locationlist,"/start/",2000,"/end/",2019)
out <- map_dfr(urls, ~ fromJSON(.x) %>% 
pluck("data"))
> dim(out)
[1] 60 32

out <- map(

)

最新更新