Skip to content

Commit 5154a66

Browse files
committed
perf: %in% -> vec_in for Dates/time_values; avoid filter in loop
1 parent c2ed117 commit 5154a66

File tree

3 files changed

+18
-8
lines changed

3 files changed

+18
-8
lines changed

NAMESPACE

+5-1
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,6 @@ importFrom(dplyr,"%>%")
150150
importFrom(dplyr,across)
151151
importFrom(dplyr,all_of)
152152
importFrom(dplyr,arrange)
153-
importFrom(dplyr,bind_rows)
154153
importFrom(dplyr,c_across)
155154
importFrom(dplyr,dplyr_col_modify)
156155
importFrom(dplyr,dplyr_reconstruct)
@@ -241,12 +240,17 @@ importFrom(tools,toTitleCase)
241240
importFrom(tsibble,as_tsibble)
242241
importFrom(utils,capture.output)
243242
importFrom(utils,tail)
243+
importFrom(vctrs,"vec_slice<-")
244244
importFrom(vctrs,vec_cast)
245245
importFrom(vctrs,vec_cbind)
246246
importFrom(vctrs,vec_data)
247247
importFrom(vctrs,vec_duplicate_any)
248248
importFrom(vctrs,vec_equal)
249+
importFrom(vctrs,vec_in)
249250
importFrom(vctrs,vec_order)
250251
importFrom(vctrs,vec_rbind)
252+
importFrom(vctrs,vec_recycle_common)
253+
importFrom(vctrs,vec_rep)
251254
importFrom(vctrs,vec_size)
255+
importFrom(vctrs,vec_slice)
252256
importFrom(vctrs,vec_sort)

R/epiprocess-package.R

+6
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,17 @@
2727
#' @importFrom rlang %||%
2828
#' @importFrom rlang is_bare_integerish
2929
#' @importFrom tools toTitleCase
30+
#' @importFrom vctrs vec_cast
3031
#' @importFrom vctrs vec_cbind
3132
#' @importFrom vctrs vec_data
3233
#' @importFrom vctrs vec_equal
34+
#' @importFrom vctrs vec_in
3335
#' @importFrom vctrs vec_order
3436
#' @importFrom vctrs vec_rbind
37+
#' @importFrom vctrs vec_recycle_common
38+
#' @importFrom vctrs vec_rep
39+
#' @importFrom vctrs vec_slice
40+
#' @importFrom vctrs vec_slice<-
3541
#' @importFrom vctrs vec_sort
3642
## usethis namespace: end
3743
NULL

R/slide.R

+7-7
Original file line numberDiff line numberDiff line change
@@ -342,7 +342,7 @@ epi_slide_one_group <- function(
342342
# Unpack the date_seq_list argument and complete the data group with missing
343343
# time values, padding on the left and right as needed.
344344
all_dates <- .date_seq_list$all_dates
345-
missing_times <- all_dates[!(all_dates %in% .data_group$time_value)]
345+
missing_times <- all_dates[!vec_in(all_dates, .data_group$time_value)]
346346
.data_group <- reclass(vec_rbind(
347347
.data_group, # (epi_df; epi_slide uses .keep = TRUE)
348348
vec_cbind( # (tibble -> vec_rbind produces tibble)
@@ -440,10 +440,10 @@ epi_slide_one_group <- function(
440440
# If all rows, then pad slide values with NAs, else filter down data group
441441
if (.all_rows) {
442442
orig_values <- slide_values
443-
slide_values <- vctrs::vec_rep(vctrs::vec_cast(NA, orig_values), nrow(.data_group))
444-
vctrs::vec_slice(slide_values, .data_group$time_value %in% available_ref_time_values) <- orig_values
443+
slide_values <- vec_rep(vec_cast(NA, orig_values), nrow(.data_group))
444+
vec_slice(slide_values, vec_in(.data_group$time_value, available_ref_time_values)) <- orig_values
445445
} else {
446-
.data_group <- .data_group %>% filter(time_value %in% available_ref_time_values)
446+
.data_group <- .data_group[vec_in(.data_group$time_value, available_ref_time_values), ]
447447
}
448448

449449
# To label the result, we will parallel some code from `epix_slide`, though
@@ -899,7 +899,7 @@ epi_slide_opt <- function(
899899
pad_late_dates <- date_seq_list$pad_late_dates
900900

901901
slide_one_grp <- function(.data_group, .group_key, ...) {
902-
missing_times <- all_dates[!(all_dates %in% .data_group$time_value)]
902+
missing_times <- all_dates[!vec_in(all_dates, .data_group$time_value)]
903903
# `frollmean` requires a full window to compute a result. Add NA values
904904
# to beginning and end of the group so that we get results for the
905905
# first `before` and last `after` elements.
@@ -969,9 +969,9 @@ epi_slide_opt <- function(
969969
group_by(!!!.x_orig_groups)
970970

971971
if (.all_rows) {
972-
result[!(result$time_value %in% ref_time_values), result_col_names] <- NA
972+
result[!vec_in(result$time_value, ref_time_values), result_col_names] <- NA
973973
} else if (user_provided_rtvs) {
974-
result <- result[result$time_value %in% ref_time_values, ]
974+
result <- result[vec_in(result$time_value, ref_time_values), ]
975975
}
976976

977977
if (!is_epi_df(result)) {

0 commit comments

Comments
 (0)