From ab222e49b0b88bf6ef2cad5bac0fc2fbcccddfa4 Mon Sep 17 00:00:00 2001 From: DavisVaughan Date: Tue, 16 Nov 2021 15:19:31 -0500 Subject: [PATCH 1/2] Return `logical()` from `vec_equal_na(NULL)` --- src/equal.c | 4 ++++ tests/testthat/test-equal.R | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/src/equal.c b/src/equal.c index f4be86a68..7b0e70ee6 100644 --- a/src/equal.c +++ b/src/equal.c @@ -475,6 +475,10 @@ SEXP vec_equal_na(SEXP x) { UNPROTECT(1); return out; } + case vctrs_type_null: { + UNPROTECT(1); + return vctrs_shared_empty_lgl; + } case vctrs_type_scalar: Rf_errorcall(R_NilValue, "Can't detect `NA` values in scalars with `vctrs_equal_na()`."); default: Rf_error("Unimplemented type in `vctrs_equal_na()`."); } diff --git a/tests/testthat/test-equal.R b/tests/testthat/test-equal.R index 8a22286d8..115909e06 100644 --- a/tests/testthat/test-equal.R +++ b/tests/testthat/test-equal.R @@ -303,6 +303,10 @@ test_that("works recursively with data frame columns", { expect_equal(vec_equal_na(df), c(FALSE, FALSE, FALSE, TRUE)) }) +test_that("works with `NULL` input (#1494)", { + expect_identical(vec_equal_na(NULL), logical()) +}) + test_that("NA propagate symmetrically (#204)", { exp <- c(NA, NA) From c5e1a098ea5a7de45d2fe30e9caf3505c4ce175c Mon Sep 17 00:00:00 2001 From: DavisVaughan Date: Tue, 16 Nov 2021 15:19:39 -0500 Subject: [PATCH 2/2] NEWS bullet --- NEWS.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/NEWS.md b/NEWS.md index f386b4411..a20df231e 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,5 +1,7 @@ # vctrs (development version) +* `vec_equal_na(NULL)` now returns `logical(0)` rather than erroring (#1494). + * `vec_as_location(missing = "error")` now fails with `NA` and `NA_character_` in addition to `NA_integer_` (#1420, @krlmlr).