Skip to content

Commit

Permalink
Subset data.frame and tibble consistently in press() (#150)
Browse files Browse the repository at this point in the history
* Subset data.frame and tibble consistently in `press()`

* NEWS bullet
  • Loading branch information
DavisVaughan authored Jan 16, 2025
1 parent 8a2968c commit 537a3a3
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 12 deletions.
3 changes: 3 additions & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
# bench (development version)

* The `.grid` argument of `press()` now subsets data.frames and tibbles
consistently (#142).

* `press()` gains a new `.quiet` argument to silence progress messages (#145).

* Fixed an issue in `bench_time_trans()` and `bench_bytes_trans()` where pretty
Expand Down
25 changes: 13 additions & 12 deletions R/press.R
Original file line number Diff line number Diff line change
Expand Up @@ -76,25 +76,30 @@ press <- function(..., .grid = NULL, .quiet = FALSE) {
)
}

# For consistent `[` methods
parameters <- tibble::as_tibble(parameters)

if (!.quiet) {
status <- format(tibble::as_tibble(parameters), n = Inf)
status <- format(parameters, n = Inf)
message(glue::glue("Running with:\n{status[[2]]}"))
}

eval_one <- function(row) {
e <- rlang::new_data_mask(new.env(parent = emptyenv()))
env <- rlang::new_data_mask(new.env(parent = emptyenv()))
names <- names(parameters)

for (col in seq_along(parameters)) {
var <- names(parameters)[[col]]
value <- parameters[row, col]
assign(var, value, envir = e)
for (i in seq_along(parameters)) {
name <- names[[i]]
column <- parameters[[i]]
value <- column[row]
assign(name, value, envir = env)
}

if (!.quiet) {
message(status[[row + 3L]])
}

rlang::eval_tidy(args[[which(unnamed)]], data = e)
rlang::eval_tidy(args[[which(unnamed)]], data = env)
}

res <- lapply(seq_len(nrow(parameters)), eval_one)
Expand All @@ -105,10 +110,6 @@ press <- function(..., .grid = NULL, .quiet = FALSE) {
# TODO: print parameters / results that are unequal?
}
res <- do.call(rbind, res)
parameters <- parameters[
rep(seq_len(nrow(parameters)), each = rows[[1]]),
,
drop = FALSE
]
parameters <- parameters[rep(seq_len(nrow(parameters)), each = rows[[1]]), ]
bench_mark(tibble::as_tibble(cbind(res[1], parameters, res[-1])))
}
10 changes: 10 additions & 0 deletions tests/testthat/test-press.R
Original file line number Diff line number Diff line change
Expand Up @@ -84,4 +84,14 @@ describe("press", {

expect_equal(res$result[[1]], 2)
})

it("`.grid` subsets tibbles and data.frames the same way (#142)", {
x <- data.frame(a = 1, b = 2)
out <- press(mark(c(a, b)), .grid = x, .quiet = TRUE)
expect_identical(out$result[[1L]], c(1, 2))

x <- tibble::tibble(a = 1, b = 2)
out <- press(mark(c(a, b)), .grid = x, .quiet = TRUE)
expect_identical(out$result[[1L]], c(1, 2))
})
})

0 comments on commit 537a3a3

Please sign in to comment.