Skip to content

Commit

Permalink
fix: list_transpose() takes into account all elements for the template
Browse files Browse the repository at this point in the history
  • Loading branch information
krlmlr committed Aug 15, 2024
1 parent 73a291c commit 0af3904
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 8 deletions.
8 changes: 4 additions & 4 deletions R/list-transpose.R
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@
#' @param x A list of vectors to transpose.
#' @param template A "template" that describes the output list. Can either be
#' a character vector (where elements are extracted by name), or an integer
#' vector (where elements are extracted by position). Defaults to the names
#' of the first element of `x`, or if they're not present, the integer
#' indices.
#' vector (where elements are extracted by position). Defaults to the union
#' of the names of the elements of `x`, or if they're not present, the
#' union of the integer indices.
#' @param simplify Should the result be [simplified][list_simplify]?
#' * `TRUE`: simplify or die trying.
#' * `NA`: simplify if possible.
Expand Down Expand Up @@ -75,7 +75,7 @@ list_transpose <- function(x,
if (length(x) == 0) {
template <- integer()
} else {
template <- template %||% vec_index(x[[1]])
template <- template %||% reduce(map(x, vec_index), vec_set_union)
}

if (!is.character(template) && !is.numeric(template)) {
Expand Down
6 changes: 3 additions & 3 deletions man/list_transpose.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 8 additions & 1 deletion tests/testthat/test-list-transpose.R
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ test_that("can use character template", {
# Default:
expect_equal(
list_transpose(x, default = NA),
list(a = c(1, NA), b = c(2, 3))
list(a = c(1, NA), b = c(2, 3), c = c(NA, 4))
)

# Change order
Expand Down Expand Up @@ -130,3 +130,10 @@ test_that("validates inputs", {
list_transpose(list(1), template = mean)
})
})

test_that("fail mixing named and unnamed vectors", {
x <- list(list(a = 1, b = 2), list(a = 3, b = 4))
expect_snapshot(error = TRUE, {
list_transpose(list(x = list(a = 1, b = 2), y = list(3, 4)))
})
})

0 comments on commit 0af3904

Please sign in to comment.