Skip to content

Commit 0d61a98

Browse files
committed
refactor: convert "year" time type to generic integer time type
1 parent a92b053 commit 0d61a98

File tree

5 files changed

+21
-21
lines changed

5 files changed

+21
-21
lines changed

R/epi_df.R

+1-2
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,7 @@
7474
#' `tsibble::yearmonth` object.
7575
#' * `"yearquarter"`: each observation corresponds to a quarter; coded as a
7676
#' `tsibble::yearquarter` object.
77-
#' * `"year"`: each observation corresponds to a year; coded as an integer
78-
#' greater than or equal to 1582.
77+
#' * `"integer"`: a generic integer index (e.g. years or something else).
7978
#'
8079
#' An unrecognizable time type is labeled "custom".
8180
#'

R/slide.R

+2-2
Original file line numberDiff line numberDiff line change
@@ -758,7 +758,7 @@ full_date_seq <- function(x, before, after, time_type) {
758758
# `tsibble` time types have their own behavior, where adding 1 corresponds to
759759
# incrementing by a quantum (smallest resolvable unit) of the date class. For
760760
# example, one step = 1 quarter for `yearquarter`.
761-
if (time_type %in% c("yearquarter", "yearweek", "yearmonth", "year")) {
761+
if (time_type %in% c("yearquarter", "yearweek", "yearmonth", "integer")) {
762762
all_dates <- seq(min(x$time_value), max(x$time_value), by = 1L)
763763

764764
if (before != 0) {
@@ -775,7 +775,7 @@ full_date_seq <- function(x, before, after, time_type) {
775775
)
776776
if (is.null(by)) {
777777
cli_abort(
778-
"time_type must be one of 'day', 'week', 'yearquarter', 'yearweek', 'yearmonth', or 'year'."
778+
"time_type must be one of 'day', 'week', 'yearquarter', 'yearweek', 'yearmonth', or 'integer'."
779779
)
780780
}
781781

R/utils.R

+7-3
Original file line numberDiff line numberDiff line change
@@ -423,8 +423,8 @@ guess_time_type <- function(time_value, time_value_arg = rlang::caller_arg(time_
423423
return("yearmonth")
424424
} else if (inherits(time_value, "yearquarter")) {
425425
return("yearquarter")
426-
} else if (rlang::is_integerish(time_value) && all(nchar(as.character(time_value)) == 4L)) {
427-
return("year")
426+
} else if (rlang::is_integerish(time_value)) {
427+
return("integer")
428428
}
429429

430430
cli_abort("Unsupported time type in column {time_value_arg}, with class {.code {class(time_value)}}",
@@ -699,10 +699,14 @@ validate_slide_window_arg <- function(arg, time_type, arg_name = rlang::caller_a
699699
if (!(inherits(arg, "difftime") && units(arg) == "weeks")) {
700700
cli_abort("Expected `{arg_name}` to be a difftime with units in weeks.")
701701
}
702-
} else if (time_type %in% c("yearweek", "yearmonth", "yearquarter", "year")) {
702+
} else if (time_type %in% c("yearweek", "yearmonth", "yearquarter")) {
703703
if (!test_int(arg, lower = 0L) || inherits(arg, "difftime")) {
704704
cli_abort("Expected `{arg_name}` to be a non-negative integer.")
705705
}
706+
} else if (time_type == "integer") {
707+
if (!test_int(arg, lower = 0L)) {
708+
cli_abort("Expected `{arg_name}` to be a non-negative integer.")
709+
}
706710
} else {
707711
cli_abort("Expected `{arg_name}` to be Inf, an appropriate a difftime, or a non-negative integer.")
708712
}

tests/testthat/test-epi_slide.R

+3-3
Original file line numberDiff line numberDiff line change
@@ -1071,7 +1071,7 @@ test_that("results for different time_types match between epi_slide and epi_slid
10711071
# tsibble time types, require before and after as integers
10721072
yearmonths <- tsibble::yearmonth(10L + k)
10731073
yearquarters <- tsibble::yearquarter(10L + k)
1074-
years <- 2000L + k
1074+
integers <- 2000L + k
10751075

10761076
ref_epi_data <- generate_special_date_data(days) %>%
10771077
group_by(geo_value)
@@ -1110,7 +1110,7 @@ test_that("results for different time_types match between epi_slide and epi_slid
11101110
test_time_type_mean(yearweeks, before = 6, after = 0)
11111111
test_time_type_mean(yearmonths, before = 6, after = 0)
11121112
test_time_type_mean(yearquarters, before = 6, after = 0)
1113-
test_time_type_mean(years, before = 6, after = 0)
1113+
test_time_type_mean(integers, before = 6, after = 0)
11141114

11151115
# `epi_slide_mean` can also handle `weeks` without `time_step` being
11161116
# provided, but `epi_slide` can't
@@ -1217,7 +1217,7 @@ test_that("helper `full_date_seq` returns expected date values", {
12171217
)
12181218
)
12191219
expect_identical(
1220-
full_date_seq(generate_special_date_data(years), before = before, after = after, time_type = "year"),
1220+
full_date_seq(generate_special_date_data(years), before = before, after = after, time_type = "integer"),
12211221
list(
12221222
all_dates = 2000L:2006L,
12231223
pad_early_dates = 1998L:1999L,

tests/testthat/test-utils.R

+8-11
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ test_that("guess_time_type works for different types", {
4545
yearmonths <- tsibble::yearmonth(10)
4646
yearquarters <- tsibble::yearquarter(10)
4747

48-
years <- c(1999, 2000)
48+
integers <- c(1999, 2000)
4949

5050
# YYYY-MM-DD is the accepted format
5151
not_ymd1 <- "January 1, 2022"
@@ -60,7 +60,7 @@ test_that("guess_time_type works for different types", {
6060
expect_equal(guess_time_type(yearmonths), "yearmonth")
6161
expect_equal(guess_time_type(yearquarters), "yearquarter")
6262

63-
expect_equal(guess_time_type(years), "year")
63+
expect_equal(guess_time_type(integers), "integer")
6464

6565
expect_error(guess_time_type(not_ymd1))
6666
expect_error(guess_time_type(not_ymd2))
@@ -69,10 +69,9 @@ test_that("guess_time_type works for different types", {
6969
})
7070

7171
test_that("guess_time_type works with gaps", {
72-
days_gaps <- as.Date("2022-01-01") + c(0, 1, 3, 4, 8, 8 + 7)
73-
weeks_gaps <- as.Date("2022-01-01") + 7 * c(0, 1, 3, 4, 8, 8 + 7)
74-
expect_equal(guess_time_type(days_gaps), "day")
75-
expect_equal(guess_time_type(weeks_gaps), "week")
72+
gaps <- c(1:6, 8, 9, 11, 8 + 7)
73+
expect_equal(guess_time_type(as.Date("2022-01-01") + gaps), "day")
74+
expect_equal(guess_time_type(as.Date("2022-01-01") + 7 * gaps), "week")
7675
})
7776

7877
test_that("enlist works", {
@@ -230,14 +229,12 @@ test_that("validate_slide_window_arg works", {
230229
expect_no_error(validate_slide_window_arg(1, "yearweek"))
231230
expect_no_error(validate_slide_window_arg(1, "yearmonth"))
232231
expect_no_error(validate_slide_window_arg(1, "yearquarter"))
233-
expect_no_error(validate_slide_window_arg(1, "year"))
234-
for (time_type in c("day", "week", "yearweek", "yearmonth", "yearquarter", "year")) {
232+
expect_no_error(validate_slide_window_arg(1, "integer"))
233+
for (time_type in c("day", "week", "yearweek", "yearmonth", "yearquarter", "integer")) {
235234
expect_no_error(validate_slide_window_arg(Inf, time_type))
236235
}
237236

238-
for (time_type in c("day", "week")) {
239-
expect_error(validate_slide_window_arg(1, time_type))
240-
}
237+
expect_error(validate_slide_window_arg(1, "week"))
241238
for (time_type in c("yearweek", "yearmonth", "yearquarter", "year")) {
242239
expect_error(validate_slide_window_arg(as.difftime(1, units = "days"), time_type))
243240
expect_error(validate_slide_window_arg(as.difftime(1, units = "weeks"), time_type))

0 commit comments

Comments
 (0)