Skip to content

Commit

Permalink
Replace ranking expression by a function in top_n()
Browse files Browse the repository at this point in the history
  • Loading branch information
lionel- authored and romainfrancois committed Jul 2, 2019
1 parent 1131d64 commit bf4edf5
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 13 deletions.
2 changes: 1 addition & 1 deletion DESCRIPTION
Expand Up @@ -24,7 +24,7 @@ Imports:
pkgconfig,
R6,
Rcpp (>= 1.0.1),
rlang (>= 0.3.1),
rlang (>= 0.4.0),
tibble (>= 2.0.0),
tidyselect (>= 0.2.5),
utils
Expand Down
22 changes: 10 additions & 12 deletions R/top-n.R
Expand Up @@ -52,29 +52,27 @@
#' }
#' }
top_n <- function(x, n, wt) {
nn <- enquo(n)
wt <- enquo(wt)

if (quo_is_missing(wt)) {
vars <- tbl_vars(x)
wt_name <- vars[length(vars)]
inform(glue("Selecting by ", wt_name))
wt <- sym(wt_name)
}

pred <- expr(local({
.n <- !!nn
if (.n > 0) {
min_rank(desc(!!wt)) <= .n
} else {
min_rank(!!wt) <= abs(.n)
}
}))
filter(x, !!pred)
filter(x, top_n_rank({{ n }}, !!wt))
}

top_n_rank <- function(n, wt) {
if (n > 0) {
min_rank(desc(wt)) <= n
} else {
min_rank(wt) <= abs(n)
}
}

#' @export
#' @rdname top_n
top_frac <- function(x, n, wt) {
top_n(x, !!enquo(n) * n(), !!enquo(wt))
top_n(x, {{ n }} * n(), {{ wt }})
}

0 comments on commit bf4edf5

Please sign in to comment.