Я работаю над проектом, который включает в себя много разных тибблов, каждый из которых имеет переменную period
в формате ГГГГММ. Ниже приведен пример того, как выглядят все мои тиблы:
tibble_1 <- tibble::tibble(
period = c(201901, 201912, 201902, 201903),
var_1 = rnorm(4),
var_2 = rnorm(4)
)
Но для некоторых операций (например, временных рядов) проще работать с реальной переменной Date. Поэтому я использую mutate для преобразования переменной периода в дату следующим образом:
tibble_1 %>%
dplyr::mutate(
date = lubridate::ymd(stringr::str_c(period, "01"))
)
Поскольку я буду много заниматься этим, и преобразование даты - не единственная мутация, которую я собираюсь делать при вызове mutate я хотел бы иметь пользовательскую функцию, которую я могу вызвать из вызова mutate. Вот моя функция:
period_to_date <- function() {
lubridate::ymd(stringr::str_c(period, "01"))
}
Который я бы позже назвал так:
tibble_1 %>%
dplyr::mutate(
date = period_to_date()
)
Проблема в том, что R не может найти объект периода (который на самом деле не является объектом в сам, но часть тиббла).
Ошибка в stri_ c (..., sep = sep, collapse = collapse, ignore_null = TRUE): объект 'period' не найден
Я почти уверен, что мне нужно определить маску данных, чтобы envir, в котором выполняется period_to_date, мог искать объект в его родительском envir (который всегда должен быть envir вызывающего, так как тиббл, содержащий переменная периода не всегда одинакова), но я не могу понять, как это сделать.