pmap() doesn't name list elements using existing names
kyrantgs opened this issue · 2 comments
kyrantgs commented
I have a use case where I need to pass in a named list with named list elements to pmap. Using purrr::pmap(), the output is named according to the list elements but this is not the case with tidytable::pmap().
library(tidytable)
purrr::pmap(
list(
my_list =
list(
group_a = c(1, 5),
group_b = c(1, 3)
)
),
function(my_list) {
sum(my_list)
}
)
#> $group_a
#> [1] 6
#>
#> $group_b
#> [1] 4
tidytable::pmap(
list(
my_list =
list(
group_a = c(1, 5),
group_b = c(1, 3)
)
),
function(my_list) {
sum(my_list)
}
)
#> [[1]]
#> [1] 6
#>
#> [[2]]
#> [1] 4
Created on 2024-05-14 with reprex v2.1.0
Session info
sessioninfo::session_info()
#> ─ Session info ───────────────────────────────────────────────────────────────
#> setting value
#> version R version 4.3.3 (2024-02-29 ucrt)
#> os Windows 10 x64 (build 19045)
#> system x86_64, mingw32
#> ui RTerm
#> language (EN)
#> date 2024-05-14
#>
#> ─ Packages ───────────────────────────────────────────────────────────────────
#> package * version date (UTC) lib source
#> cli 3.6.2 2023-12-11 [1] CRAN (R 4.3.3)
#> data.table 1.15.4 2024-03-30 [1] CRAN (R 4.3.3)
#> digest 0.6.35 2024-03-11 [1] CRAN (R 4.3.3)
#> evaluate 0.23 2023-11-01 [1] CRAN (R 4.3.3)
#> fansi 1.0.6 2023-12-08 [1] CRAN (R 4.3.3)
#> fastmap 1.1.1 2023-02-24 [1] CRAN (R 4.3.3)
#> fs 1.6.4 2024-04-25 [1] CRAN (R 4.3.3)
#> glue 1.7.0 2024-01-09 [1] CRAN (R 4.3.3)
#> htmltools 0.5.8.1 2024-04-04 [1] CRAN (R 4.3.3)
#> knitr 1.46 2024-04-06 [1] CRAN (R 4.3.3)
#> lifecycle 1.0.4 2023-11-07 [1] CRAN (R 4.3.3)
#> magrittr 2.0.3 2022-03-30 [1] CRAN (R 4.3.3)
#> pillar 1.9.0 2023-03-22 [1] CRAN (R 4.3.3)
#> purrr 1.0.2 2023-08-10 [1] CRAN (R 4.3.3)
#> R.cache 0.16.0 2022-07-21 [1] CRAN (R 4.3.3)
#> R.methodsS3 1.8.2 2022-06-13 [1] CRAN (R 4.3.3)
#> R.oo 1.26.0 2024-01-24 [1] CRAN (R 4.3.3)
#> R.utils 2.12.3 2023-11-18 [1] CRAN (R 4.3.3)
#> reprex 2.1.0 2024-01-11 [1] CRAN (R 4.3.3)
#> rlang 1.1.3 2024-01-10 [1] CRAN (R 4.3.3)
#> rmarkdown 2.26 2024-03-05 [1] CRAN (R 4.3.3)
#> rstudioapi 0.16.0 2024-03-24 [1] CRAN (R 4.3.3)
#> sessioninfo 1.2.2 2021-12-06 [1] CRAN (R 4.3.3)
#> styler 1.10.3 2024-04-07 [1] CRAN (R 4.3.3)
#> tidyselect 1.2.1 2024-03-11 [1] CRAN (R 4.3.3)
#> tidytable * 0.11.0 2024-02-09 [1] CRAN (R 4.3.3)
#> utf8 1.2.4 2023-10-22 [1] CRAN (R 4.3.3)
#> vctrs 0.6.5 2023-12-01 [1] CRAN (R 4.3.3)
#> withr 3.0.0 2024-01-16 [1] CRAN (R 4.3.3)
#> xfun 0.43 2024-03-25 [1] CRAN (R 4.3.3)
#> yaml 2.3.8 2023-12-11 [1] CRAN (R 4.3.2)
#>
#>
#> ──────────────────────────────────────────────────────────────────────────────
markfairbanks commented
Yep this is doable. It looks like it just assumes the names of the first list passed?
l <- list(
vals1 = list(a = 1, b = 2),
vals2 = list(c = 3, d = 4)
)
purrr::pmap(l, ~ .x + .y)
#> $a
#> [1] 4
#>
#> $b
#> [1] 6
l <- list(
vals1 = list(1, 2),
vals2 = list(c = 3, d = 4)
)
purrr::pmap(l, ~ .x + .y)
#> [[1]]
#> [1] 4
#>
#> [[2]]
#> [1] 6
kyrantgs commented
Thanks, and yes, it does appear to assume the first name. If that is the behaviour/output that people expect from purrr::pmap(), it would be good to replicate in the tidytable version.