Real world examples of packed and nested data
No packed / nested data frames
#store all pages in a list first
baseurl <- "https://projects.propublica.org/nonprofits/api/v2/search.json?order=revenue&sort_order=desc"
pages <- list()
for(i in 0:10){
mydata <- jsonlite::fromJSON(paste0(baseurl, "&page=", i))
message("Retrieving page ", i)
pages[[i+1]] <- mydata$organizations
}
# both OK
alldata1 <- jsonlite::rbind_pages(pages)
alldata2 <- dplyr::bind_rows(pages)
# not OK
alldata3 <- do.call(vctrs::vec_rbind, pages)
Packed data frames
# with packed data frames
urls <- sprintf('https://api.github.com/repos/tidyverse/ggplot2/commits?page=%d', 1:5)
pages <- lapply(urls, jsonlite::fromJSON)
# ok
alldata1 <- jsonlite::rbind_pages(pages)
# unsupported
alldata2 <- dplyr::bind_rows(pages)
# error
alldata3 <- do.call(vctrs::vec_rbind, pages)
Nested data frames
The flatten argument in fromJSON converts packed into nested data frames:
# with nested data frames
urls <- sprintf('https://api.github.com/repos/tidyverse/ggplot2/commits?page=%d', 1:5)
pages <- lapply(urls, jsonlite::fromJSON, flatten = TRUE)
# ok
alldata1 <- jsonlite::rbind_pages(pages)
alldata2 <- dplyr::bind_rows(pages)
#error
alldata3 <- do.call(vctrs::vec_rbind, pages)
Real world examples of packed and nested data
No packed / nested data frames
Packed data frames
Nested data frames
The
flattenargument infromJSONconverts packed into nested data frames: