Skip to content

vec_rbind with packed and nested data frames #220

Description

@jeroen

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)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions