A small package with list-tibble join operations.
There no native strictly key-pair data structure to R. There is, however, a sufficently good first-approach which is a named list.
{ ids <- paste0(sample(letters, size = 1000, replace = TRUE), sample(1:30, 4, replace = TRUE)) named_list <- purrr::map(1:1000, function(.x) rnorm(10)) names(named_list) <- ids head(named_list) }
And this approach can get you far-ish.
```{R messages = FALSE, warning = FALSE} library(tidyverse)
pluck(named_list, sample(ids, 1))
ids_to_update <- sample(ids, 5)
modify_at(named_list, ids_to_update, function(x) 2*x - 3) -> updated_list
sample(named_list, 200) %>% # recover ids given condition keep(~ mean(.x) < -.5) %>% names()
And by that I mean this far. ```{R, error = TRUE} (tibble(key = sample(ids, 100), val = runif(100)) -> keyval_tibble) left_join(keyval_tibble) left_join(keyval_tibble, named_list, by = character(), copy = TRUE)
lisjoin
, as of now, provides a lazy prototypical approach:
```{R, error = TRUE, message = FALSE, warning = FALSE} library(lisjoin)
lisjoin(keyval_tibble, named_list, .key = key)
Right now `lisjoin` supports key-guessing, type stable, left/right/inner/full joins. For example, since we know the output is going to be a double-precision number: ```{R, error = TRUE, message = FALSE, warning = FALSE} library(lisjoin) map(named_list, ~ reduce(.x, sum)) %>% # reducing list lisjoin(keyval_tibble, ., .key = key, type = 'dbl')
This feature is still under work, in the future expect it to work with length > 1 on the list's elements, with automatic unnesting.
This package is partly inspired primarely by clojure's map structure, purrr's filosophy and design. In the long term I see it as a tool allowing tidy data workflows on lists.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.