The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]metanet.ch.
crossmap provides an extension to purrr’s
family of mapping functions. xmap()
works like
purrr::pmap()
, but applies a function to every combination
of elements in a list of inputs.
crossmap also includes a few other general purpose and specialized functions for working with combinations of list elements.
You can install the released version of crossmap from CRAN with:
install.packages("crossmap")
or the development version from GitHub with:
# install.packages("pak")
::pkg_install("rossellhayes/crossmap") pak
While purrr::pmap()
applies a function to list elements
pairwise, xmap()
applies a function to all combinations of
elements.
pmap_chr(list(1:3, 1:3), ~ paste(.x, "*", .y, "=", .x * .y))
#> [1] "1 * 1 = 1" "2 * 2 = 4" "3 * 3 = 9"
xmap_chr(list(1:3, 1:3), ~ paste(.x, "*", .y, "=", .x * .y))
#> [1] "1 * 1 = 1" "2 * 1 = 2" "3 * 1 = 3" "1 * 2 = 2" "2 * 2 = 4" "3 * 2 = 6"
#> [7] "1 * 3 = 3" "2 * 3 = 6" "3 * 3 = 9"
xmap_mat()
formats xmap()
results into a
matrix.
xmap_mat(list(1:3, 1:6), prod)
#> 1 2 3 4 5 6
#> 1 1 2 3 4 5 6
#> 2 2 4 6 8 10 12
#> 3 3 6 9 12 15 18
crossmap also integrates with furrr
to offer parallelized versions of the xmap()
functions.
::plan("multisession")
futurefuture_xmap_chr(list(1:3, 1:3), ~ paste(.x, "*", .y, "=", .x * .y))
#> [1] "1 * 1 = 1" "2 * 1 = 2" "3 * 1 = 3" "1 * 2 = 2" "2 * 2 = 4" "3 * 2 = 6"
#> [7] "1 * 3 = 3" "2 * 3 = 6" "3 * 3 = 9"
cross_fit()
is an easy wrapper for an important use of
crossmap, crossing model specifications with different
formulas, subsets, and weights.
cross_fit(
mtcars,formulas = list(hp = mpg ~ hp, drat = mpg ~ drat),
cols = c(cyl, vs),
weights = c(wt, NA)
)#> # A tibble: 40 × 21
#> model weights cyl vs term estimate std.error statistic p.value
#> <chr> <chr> <dbl> <dbl> <chr> <dbl> <dbl> <dbl> <dbl>
#> 1 hp NA 4 0 (Interce… 26 NaN NaN NaN
#> 2 hp NA 4 0 hp NA NA NA NA
#> 3 hp NA 4 1 (Interce… 36.0 5.52e+ 0 6.52e+ 0 1.85e- 4
#> 4 hp NA 4 1 hp -0.113 6.55e- 2 -1.73e+ 0 1.21e- 1
#> 5 hp NA 6 0 (Interce… 23.2 1.02e-14 2.28e+15 2.79e-16
#> 6 hp NA 6 0 hp -0.0200 7.53e-17 -2.66e+14 2.40e-15
#> 7 hp NA 6 1 (Interce… 24.2 1.41e+ 1 1.72e+ 0 2.28e- 1
#> 8 hp NA 6 1 hp -0.0440 1.22e- 1 -3.61e- 1 7.52e- 1
#> 9 hp NA 8 0 (Interce… 18.1 2.99e+ 0 6.05e+ 0 5.74e- 5
#> 10 hp NA 8 0 hp -0.0142 1.39e- 2 -1.02e+ 0 3.26e- 1
#> # … with 30 more rows, and 12 more variables: r.squared <dbl>,
#> # adj.r.squared <dbl>, sigma <dbl>, model.statistic <dbl>,
#> # model.p.value <dbl>, df <dbl>, logLik <dbl>, AIC <dbl>, BIC <dbl>,
#> # deviance <dbl>, df.residual <int>, nobs <int>
cross_list()
finds all combinations of elements from a
set of lists.
cross_list(number = 1:3, letter = letters[1:3])
#> $number
#> [1] 1 2 3 1 2 3 1 2 3
#>
#> $letter
#> [1] "a" "a" "a" "b" "b" "b" "c" "c" "c"
cross_tbl(number = 1:3, letter = letters[1:3])
#> # A tibble: 9 × 2
#> number letter
#> <int> <chr>
#> 1 1 a
#> 2 2 a
#> 3 3 a
#> 4 1 b
#> 5 2 b
#> 6 3 b
#> 7 1 c
#> 8 2 c
#> 9 3 c
And cross_join()
finds all combinations of the rows of
data frames.
cross_join(
tibble(
color = c("red", "yellow", "orange"),
fruit = c("apple", "banana", "cantaloupe")
),tibble(dessert = c("cupcake", "muffin", "streudel"), makes = c(8, 6, 1))
)#> # A tibble: 9 × 4
#> color fruit dessert makes
#> <chr> <chr> <chr> <dbl>
#> 1 red apple cupcake 8
#> 2 red apple muffin 6
#> 3 red apple streudel 1
#> 4 yellow banana cupcake 8
#> 5 yellow banana muffin 6
#> 6 yellow banana streudel 1
#> 7 orange cantaloupe cupcake 8
#> 8 orange cantaloupe muffin 6
#> 9 orange cantaloupe streudel 1
map_vec()
and variants automatically determine output
types. This means you don’t have to worry about adding
_int()
, _dbl()
or _chr()
.
map_vec(sample(5), ~ . ^ 2)
#> [1] 4 1 9 16 25
map_vec(c("apple", "banana", "cantaloupe"), paste0, "s")
#> [1] "apples" "bananas" "cantaloupes"
Hex sticker font is Source Sans by Adobe.
Please note that crossmap is released with a Contributor Code of Conduct.
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.