From 2e366339c2a43333eb03e28bebbc6287d4a2a158 Mon Sep 17 00:00:00 2001 From: Nic Crane Date: Mon, 6 Sep 2021 11:42:03 +0100 Subject: [PATCH 1/2] Restyle and implement modeoptions --- r/src/compute.cpp | 15 ++++++ r/tests/testthat/test-compute-no-bindings.R | 58 ++++++++++++++++++--- 2 files changed, 66 insertions(+), 7 deletions(-) diff --git a/r/src/compute.cpp b/r/src/compute.cpp index 446e011f548..6eeb9455cce 100644 --- a/r/src/compute.cpp +++ b/r/src/compute.cpp @@ -398,6 +398,21 @@ std::shared_ptr make_compute_options( return out; } + if (func_name == "mode") { + using Options = arrow::compute::ModeOptions; + auto out = std::make_shared(Options::Defaults()); + if (!Rf_isNull(options["n"])) { + out->n = cpp11::as_cpp(options["n"]); + } + if (!Rf_isNull(options["min_count"])) { + out->min_count = cpp11::as_cpp(options["min_count"]); + } + if (!Rf_isNull(options["skip_nulls"])) { + out->skip_nulls = cpp11::as_cpp(options["skip_nulls"]); + } + return out; + } + return nullptr; } diff --git a/r/tests/testthat/test-compute-no-bindings.R b/r/tests/testthat/test-compute-no-bindings.R index 33b97e8ed76..c7db1951343 100644 --- a/r/tests/testthat/test-compute-no-bindings.R +++ b/r/tests/testthat/test-compute-no-bindings.R @@ -17,37 +17,81 @@ test_that("non-bound compute kernels using TrimOptions", { expect_equal( - call_function("utf8_trim", Scalar$create("abracadabra"), options = list(characters = "ab")), + call_function( + "utf8_trim", + Scalar$create("abracadabra"), + options = list(characters = "ab") + ), Scalar$create("racadabr") ) expect_equal( - call_function("utf8_ltrim", Scalar$create("abracadabra"), options = list(characters = "ab")), + call_function( + "utf8_ltrim", + Scalar$create("abracadabra"), + options = list(characters = "ab") + ), Scalar$create("racadabra") ) expect_equal( - call_function("utf8_rtrim", Scalar$create("abracadabra"), options = list(characters = "ab")), + call_function( + "utf8_rtrim", + Scalar$create("abracadabra"), + options = list(characters = "ab") + ), Scalar$create("abracadabr") ) expect_equal( - call_function("utf8_rtrim", Scalar$create("abracadabra"), options = list(characters = "ab")), + call_function( + "utf8_rtrim", + Scalar$create("abracadabra"), + options = list(characters = "ab") + ), Scalar$create("abracadabr") ) expect_equal( - call_function("ascii_ltrim", Scalar$create("abracadabra"), options = list(characters = "ab")), + call_function( + "ascii_ltrim", + Scalar$create("abracadabra"), + options = list(characters = "ab") + ), Scalar$create("racadabra") ) expect_equal( - call_function("ascii_rtrim", Scalar$create("abracadabra"), options = list(characters = "ab")), + call_function( + "ascii_rtrim", + Scalar$create("abracadabra"), + options = list(characters = "ab") + ), Scalar$create("abracadabr") ) expect_equal( - call_function("ascii_rtrim", Scalar$create("abracadabra"), options = list(characters = "ab")), + call_function( + "ascii_rtrim", + Scalar$create("abracadabra"), + options = list(characters = "ab") + ), Scalar$create("abracadabr") ) }) + +test_that("non-bound compute kernels using ModeOptions", { + expect_equal( + as.vector( + call_function("mode", Array$create(c(1:10, 10, 9, NA)), options = list(n = 3)) + ), + tibble::tibble("mode" = c(9, 10, 1), "count" = c(2L, 2L, 1L)) + ) + + expect_equal( + as.vector( + call_function("mode", Array$create(c(1:10, 10, 9, NA)), options = list(n = 3, skip_nulls = FALSE)) + ), + tibble::tibble("mode" = numeric(), "count" = integer()) + ) +}) From 01ff4f46e77c6681b3e5db47c8e540a61fdcd83c Mon Sep 17 00:00:00 2001 From: Nic Crane Date: Mon, 6 Sep 2021 15:57:36 +0100 Subject: [PATCH 2/2] Update var types --- r/src/compute.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/r/src/compute.cpp b/r/src/compute.cpp index 6eeb9455cce..5e543b88534 100644 --- a/r/src/compute.cpp +++ b/r/src/compute.cpp @@ -402,10 +402,10 @@ std::shared_ptr make_compute_options( using Options = arrow::compute::ModeOptions; auto out = std::make_shared(Options::Defaults()); if (!Rf_isNull(options["n"])) { - out->n = cpp11::as_cpp(options["n"]); + out->n = cpp11::as_cpp(options["n"]); } if (!Rf_isNull(options["min_count"])) { - out->min_count = cpp11::as_cpp(options["min_count"]); + out->min_count = cpp11::as_cpp(options["min_count"]); } if (!Rf_isNull(options["skip_nulls"])) { out->skip_nulls = cpp11::as_cpp(options["skip_nulls"]);