Я пишу функцию, чтобы взять дату и вывести (30 июня) месяц финансового года, где июль - это месяц 1 финансового года, август - 2, а июнь - 12.
Например, учитывая два года дат, я ожидаю, что вывод этих данных будет c(1:12, 1:12)
:
data.frame(perf_dt = seq.Date(from = as.Date("2019-07-01"),
to = as.Date("2021-06-01"),
by = "month"))
Моя текущая функция такова. Он включает в себя logi c, чтобы дополнительно разрешить вывод меток.
FY_mo <- function(date, label = F, abbrev = F) {
a <- (5 + (lubridate::month(date) %% 12)) + 1
CY_num = lubridate::month(date)
ifelse(!label, a,
ifelse(abbrev,
month.abb[CY_num],
month.name[CY_num]))
}
Это работает, когда я передаю отдельные даты. Например, этот тест из testthat
проходит:
test_that("FY_mo works on indiv input dates", {
expect_equal(7, FY_mo(as.Date("2020-01-01")))
expect_equal("January", FY_mo(as.Date("2020-01-01"), label = TRUE))
expect_equal("Jan", FY_mo(as.Date("2020-01-01"), label = TRUE, abbrev = TRUE))
})
Но он не работает, когда я передаю ему вектор. Код ниже выводит все «13».
data.frame(perf_dt = seq.Date(from = as.Date("2019-07-01"),
to = as.Date("2021-06-01"),
by = "month")) %>%
dplyr::mutate(FY_mo = FY_mo(perf_dt)) %>%
dplyr::pull(FY_mo)
#[1] 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13
Где моя ошибка? Есть ли лучший способ структурировать функцию для получения правильного вывода для векторов?