diff --git a/R/repr_matrix_df.r b/R/repr_matrix_df.r index af8dcbe..f4b0030 100644 --- a/R/repr_matrix_df.r +++ b/R/repr_matrix_df.r @@ -116,8 +116,8 @@ arr_part_format <- function(part) { arr_parts_combine <- function(parts, rownms, colnms) { omit <- attr(parts, 'omit') mat <- switch(omit, - rows = rbind(parts$upper, chars$ellip_v, parts$lower, deparse.level = 0L), - cols = cbind(parts$left, chars$ellip_h, parts$right, deparse.level = 0L), + rows = rbind(parts$upper, if (ncol(parts$upper)) chars$ellip_v, parts$lower, deparse.level = 0L), + cols = cbind(parts$left, if (nrow(parts$left)) chars$ellip_h, parts$right, deparse.level = 0L), none = parts$full, both = rbind( cbind(parts$ul, chars$ellip_h, parts$ur, deparse.level = 0L), diff --git a/tests/testthat/test_repr_array_df.r b/tests/testthat/test_repr_array_df.r index 816e8b0..84a3d0d 100644 --- a/tests/testthat/test_repr_array_df.r +++ b/tests/testthat/test_repr_array_df.r @@ -204,3 +204,17 @@ test_that('data.frame with list columns can be displayed', { expect_identical(repr_html(data.table::as.data.table(df)), sub('data\\.frame','data.table',expected)) } }) + +test_that("partially-empty matrices requiring elision can be displayed", { + withr::local_options(list( + repr.matrix.max.rows = 8L, + repr.matrix.max.cols = 8L + )) + m <- matrix(nrow = 0L, ncol = 10L) + expect_silent(repr(m)) + expect_silent(repr(t(m)) + + colnames(m) <- sprintf("A%02d", 1:10) + expect_match(repr(m), "A04[^A]*A07") + expect_match(repr(t(m)), "A04[^A]*A07") +})