From c35bf3ab7584a09bf6f77ccc4360d681324e19d0 Mon Sep 17 00:00:00 2001 From: Lionel Henry Date: Fri, 16 Jun 2017 10:13:01 +0200 Subject: [PATCH] Handle quosured symbols in remaining windowed handlers --- src/hybrid_window.cpp | 4 ++-- tests/testthat/test-mutate-windowed.R | 20 ++++++++++++++++++-- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/hybrid_window.cpp b/src/hybrid_window.cpp index 3034bd1b6c..768b1e397a 100644 --- a/src/hybrid_window.cpp +++ b/src/hybrid_window.cpp @@ -84,12 +84,12 @@ Result* ntile_prototype(SEXP call, const ILazySubsets& subsets, int nargs) { if (nargs != 2) return 0; // handle 2nd arg - SEXP ntiles = CADDR(call); + SEXP ntiles = maybe_rhs(CADDR(call)); if (TYPEOF(ntiles) != INTSXP && TYPEOF(ntiles) != REALSXP) return 0; int number_tiles = as(ntiles); if (number_tiles == NA_INTEGER) return 0; - RObject data(CADR(call)); + RObject data(maybe_rhs(CADR(call))); bool ascending = true; if (TYPEOF(data) == LANGSXP && CAR(data) == Rf_install("desc")) { data = CADR(data); diff --git a/tests/testthat/test-mutate-windowed.R b/tests/testthat/test-mutate-windowed.R index 0e98250144..3ac71a99b6 100644 --- a/tests/testthat/test-mutate-windowed.R +++ b/tests/testthat/test-mutate-windowed.R @@ -200,11 +200,27 @@ test_that("dim attribute is stripped from grouped mutate (#1918)", { expect_null(dim(df_rowwise$b)) }) -test_that("min_rank() is hybrided even with quosures", { - min_rank <- bad_hybrid_handler +test_that("window handlers handle quosured symbols", { + ntile <- min_rank <- percent_rank <- dense_rank <- cume_dist <- bad_hybrid_handler + expect_identical( + pull(mutate(mtcars, ntile(!! quo(disp), 2))), + dplyr::ntile(mtcars$disp, 2) + ) expect_identical( pull(mutate(mtcars, min_rank(!! quo(cyl)))), dplyr::min_rank(mtcars$cyl) ) + expect_identical( + pull(mutate(mtcars, percent_rank(!! quo(cyl)))), + dplyr::percent_rank(mtcars$cyl) + ) + expect_identical( + pull(mutate(mtcars, dense_rank(!! quo(cyl)))), + dplyr::dense_rank(mtcars$cyl) + ) + expect_identical( + pull(mutate(mtcars, cume_dist(!! quo(cyl)))), + dplyr::cume_dist(mtcars$cyl) + ) })