diff --git a/R/Subset.R b/R/Subset.R index d9cb384e2daf32cfb6aca0294f101db81596eff0..75b72216fc7bb9f712b378f279592b7418eb8b42 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 f9ec4187af2a517f8ce8032e6d36d1eb3663daa8..872693e3081401533eb6cf014ef92e600912cb45 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 +) + +}) +