Итак, я пытаюсь сделать пакет (я не включил мои заголовки roxygen2 ниже):
У меня есть эта функция:
date_from_text <- function(df, x){
x <- rlang::enquo(x)
name <- rlang::quo_name(x)
df %>%
dplyr::mutate(!!name := lubridate::ymd_hms(!!x))
}
И когда столбец datetime имеет правильный класс, я использую его для извлечения всего компонента.
date_columns <- function(df, x){
x <- rlang::enquo(x)
df %>%
dplyr::mutate(year=lubridate::year(!!x),
ydag=lubridate::yday(!!x),
weekday=lubridate::wday(!!x, label=FALSE),
hour = lubridate::hour(!!x),
hour_min= hms::as.hms(lubridate::force_tz(!!x)),
week_num = lubridate::week(!!x),
month = lubridate::month(!!x),
date = lubridate::date(!!x))
}
Я не хочу включать функцию date_from_text
в NAMESPACE
и хочу как-то включить ее в функцию date_columns
. Что-то вроде проверки, имеет ли метка времени правильный класс, а если нет, то измените класс ... и затем создайте все компоненты datetime.
Я не знаю, как вызвать первую функцию внутри другой функции.
данные для тестирования:
df <- structure(list(time = c("2018-01-30 20:08:18", "2018-02-01 21:01:25",
"2018-01-31 23:25:12", "2018-01-28 23:45:34", "2018-01-31 12:00:55",
"2018-02-04 09:15:31", "2018-01-27 21:08:02", "2018-02-08 01:50:31",
"2018-02-01 03:15:43", "2018-02-04 01:04:52"), type = c("A",
"D", "B", "B", "B", "D", "C", "C", "C", "A")), .Names = c("time",
"type"), row.names = c(NA, -10L), class = c("tbl_df", "tbl",
"data.frame"))
ОБНОВЛЕНИЕ: Теперь я включил date_from_text
в date_columns
date_columns <- function(df, x){
x <- rlang::enquo(x)
out <- df %>%
date_from_text(!!x) %>%
dplyr::mutate(year=lubridate::year(!!x),
ydag=lubridate::yday(!!x),
weekday=lubridate::wday(!!x, label=FALSE),
hour = lubridate::hour(!!x),
hour_min= hms::as.hms(lubridate::force_tz(!!x)),
week_num = lubridate::week(!!x),
month = lubridate::month(!!x),
date = lubridate::date(!!x))
out
}
Так что я не понимаю, почему я должен снова использовать !!x
внутри date_columns
?? Он уже включен в date_from_text
. Я вызываю функцию, а не создаю ее ...