Я просто готовлю какую-то таблицу, например cols<- c("Metrics",as.Date(Sys.Date()-8,origin = "1899-12-30"),as.Date(Sys.Date()-1,origin = "1899-12-30")), и не получаю ожидаемого результата. Кто-нибудь, пожалуйста, помогите.
Вывод: «Метрики» «17927» «17934»
cols<- c("Metrics",as.Date(Sys.Date()-8,origin = "1899-12-30"),as.Date(Sys.Date()-1,origin = "1899-12-30"))
cols<- c("Metrics",as.Date(Sys.Date()-8,origin = "1899-12-
30"),as.Date(Sys.Date()-1,origin = "1899-12-30"))
Ожидаемый результат:
"Metrics" "2019-01-31" "2019-02-07"





1) вывод символов Если вы ищете вектор символов в качестве результата, тогда преобразуйте компоненты класса Date в character. Также обратите внимание, что указанный в вопросе as.Date не нужен, поскольку Sys.Date() и смещения от него уже относятся к классу Date. Далее обратите внимание, что если Sys.Date() звонили дважды прямо в полночь, возможно, что эти два звонка могли произойти в разные дни. Чтобы избежать этой возможности, мы создаем переменную today, чтобы ее можно было вызывать только один раз.
today <- Sys.Date()
cols <- c("Metrics", as.character(today-8), as.character(today-1))
cols
## [1] "Metrics" "2019-01-31" "2019-02-07"
1а) Это можно сделать еще короче.
cols <- c("Metrics", as.character(Sys.Date() - c(8, 1)))
cols
## [1] "Metrics" "2019-01-31" "2019-02-07"
2) вывод списка В качестве альтернативы, если вам нужен список с одним компонентом character и двумя компонентами Date, тогда:
today <- Sys.Date()
L <- list("Metrics", today - 8, today - 1)
L
давая:
[[1]]
[1] "Metrics"
[[2]]
[1] "2019-01-31"
[[3]]
[1] "2019-02-07"
Если бы у нас уже был L и нам нужен вектор символов, мы могли бы дополнительно преобразовать его следующим образом:
sapply(L, as.character)
## [1] "Metrics" "2019-01-31" "2019-02-07"
Поместите его в
list, поскольку вектор может содержать только один тип, то естьlist("Metrics", as.Date(Sys.Date()-8,origin = "1899-12- 30"),as.Date(Sys.Date()-1,origin = "1899-12-30")).