From 2329fb1d17edc55fdf014ede3ac542924486ea5b Mon Sep 17 00:00:00 2001 From: aho Date: Thu, 21 Dec 2023 16:12:57 +0100 Subject: [PATCH] Fix dimension when drop = T and the remaining dimension is one with length > 1 --- R/Subset.R | 3 ++- tests/testthat/test-Subset.R | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/R/Subset.R b/R/Subset.R index d9cb384..75b7221 100644 --- a/R/Subset.R +++ b/R/Subset.R @@ -136,7 +136,8 @@ Subset <- function(x, along, indices, drop = FALSE) { if (!identical(dim_names, character(0))) { # If there is one dim left, subset won't have dimension (but it should # have one). Add it back. - dim(subset) <- dim(x)[dim_names] + subset <- array(subset, dim = length(subset)) + names(dim(subset)) <- dim_names } else { # a number left dim(subset) <- 1 } diff --git a/tests/testthat/test-Subset.R b/tests/testthat/test-Subset.R index f9ec418..872693e 100644 --- a/tests/testthat/test-Subset.R +++ b/tests/testthat/test-Subset.R @@ -279,3 +279,18 @@ list(dim = 1, dimensions = c('dat', 'lat', 'lon')) }) +test_that("5. drop = T", { +arr <- array(1:3, dim = c(dat = 1, var = 1, sdate = 3)) + +expect_equal( +dim(Subset(arr, "sdate", 1:2, drop = T)), +c(sdate = 2) +) + +expect_equal( +dim(Subset(arr, "sdate", 2, drop = T)), +1 +) + +}) + -- GitLab