From 7660d394839094b00332d7f0d3e287549b077014 Mon Sep 17 00:00:00 2001 From: Matt Dowle Date: Fri, 27 Aug 2021 18:06:09 -0600 Subject: [PATCH 1/2] dcast(empty) returns empty --- NEWS.md | 2 ++ R/fcast.R | 1 - inst/tests/tests.Rraw | 3 +-- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/NEWS.md b/NEWS.md index a6fbba8fbf..dcd11d7dc3 100644 --- a/NEWS.md +++ b/NEWS.md @@ -350,6 +350,8 @@ # # remaining 99,987 of these 100,000 were already identical ``` + +41. `dcast(empty-DT)` now returns an empty `data.table` rather than error `Cannot cast an empty data.table`, [#1215](https://github.com/Rdatatable/data.table/issues/1215). Thanks to Damian Betebenner for reporting, and Matt Dowle for fixing. ## NOTES diff --git a/R/fcast.R b/R/fcast.R index 465ff665da..efe18cf72c 100644 --- a/R/fcast.R +++ b/R/fcast.R @@ -151,7 +151,6 @@ dcast.data.table = function(data, formula, fun.aggregate = NULL, sep = "_", ..., idx = which(eval(subset, data, parent.frame())) # any advantage thro' secondary keys? dat = .Call(CsubsetDT, dat, idx, seq_along(dat)) } - if (!nrow(dat) || !ncol(dat)) stopf("Can not cast an empty data.table") fun.call = m[["fun.aggregate"]] fill.default = NULL if (is.null(fun.call)) { diff --git a/inst/tests/tests.Rraw b/inst/tests/tests.Rraw index e5a1fb04fc..64febf8b13 100644 --- a/inst/tests/tests.Rraw +++ b/inst/tests/tests.Rraw @@ -13717,8 +13717,7 @@ test(1962.086, dcast(DT, a ~ a, drop = NA), DT = data.table(a = c(1, 1, 2, 2), b = list(1, 2, 3, 4), c = c(4, 4, 2, 2)) test(1962.087, dcast(DT, a ~ b, value.var = 'b'), error = 'Columns specified in formula can not be of type list') -test(1962.088, dcast(DT[0L, ], a ~ c, value.var = 'b'), - error = 'Can not cast an empty data.table') +test(1962.088, dcast(DT[0L, ], a ~ c, value.var = 'b'), data.table(a=numeric())) #1215 test(1962.089, dcast(DT, a ~ c, value.var = 'b'), data.table(a = c(1, 2), `2` = c(0L, 2L), `4` = c(2L, 0L), key = 'a'), message = 'Aggregate function missing') From 93fb636e0bce55a80884594f457249be87bc6527 Mon Sep 17 00:00:00 2001 From: Matt Dowle Date: Fri, 27 Aug 2021 18:19:00 -0600 Subject: [PATCH 2/2] empty result is keyed, good --- inst/tests/tests.Rraw | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inst/tests/tests.Rraw b/inst/tests/tests.Rraw index 64febf8b13..769703c7e5 100644 --- a/inst/tests/tests.Rraw +++ b/inst/tests/tests.Rraw @@ -13717,7 +13717,7 @@ test(1962.086, dcast(DT, a ~ a, drop = NA), DT = data.table(a = c(1, 1, 2, 2), b = list(1, 2, 3, 4), c = c(4, 4, 2, 2)) test(1962.087, dcast(DT, a ~ b, value.var = 'b'), error = 'Columns specified in formula can not be of type list') -test(1962.088, dcast(DT[0L, ], a ~ c, value.var = 'b'), data.table(a=numeric())) #1215 +test(1962.088, dcast(DT[0L, ], a ~ c, value.var = 'b'), data.table(a=numeric(), key="a")) #1215 test(1962.089, dcast(DT, a ~ c, value.var = 'b'), data.table(a = c(1, 2), `2` = c(0L, 2L), `4` = c(2L, 0L), key = 'a'), message = 'Aggregate function missing')