дата минус 1 день во время цепочки труб - PullRequest
1 голос
/ 15 апреля 2020
library(tidyverse)
library(lubridate)

Я создаю переменную training_date:

training_date <- paste0(year(Sys.Date()), "-", format.Date(Sys.Date(), "%m"), "-01")
training_date
[1] "2020-04-01"

В другом месте моего кода я хотел бы взять это и вычесть один день в цепочке каналов:

month_end <- training_date %>% as_date() - 1
month_end %>% str
 Date[1:1], format: "2020-03-31"

Я бы хотел, чтобы конец месяца был просто строкой. Я мог бы просто сделать это:

month_end <- month_end %>% toString()
> month_end %>% str()
 chr "2020-03-31"

Но я бы предпочел сделать это в одном. Попробовал:

month_end <- training_date %>% as_date() - 1 %>% toString()
Error in unclass(as.Date(e1)) - e2 : 
  non-numeric argument to binary operator

Затем попытался:

month_end <- training_date %>% (as_date() - 1) %>% toString()
Error in inherits(x, c("yearmon", "yearqtr")) : 
  argument "x" is missing, with no default

Затем попытался:

month_end <- training_date %>% (as_date(.) - 1) %>% toString()
Error in as_date(.) : object '.' not found

Затем попытался:

month_end <- training_date %>% (as_date(.) - 1) %>% toString(.)
Error in as_date(.) : object '.' not found

Затем попытался:

month_end <- training_date %>% as_date(.) - 1 %>% {toString()}
 Error in paste(x, collapse = ", ") : 
  argument "x" is missing, with no default 

Затем попытался:

month_end <- training_date %>% as_date() - 1 %>% {toString(.)}
Error in unclass(as.Date(e1)) - e2 : 
  non-numeric argument to binary operator

Как я могу взять переменную training_date, как определено сверху, превратить ее в дату, вычесть день, а затем превратить в строка в одной цепочке?

1 Ответ

2 голосов
/ 15 апреля 2020

-1 это проблема.

Это работает:

training_date %>% as_date() %>% toString()
#[1] "2020-04-01"

, но это не

training_date %>% as_date() - 1 %>% toString()

Ошибка в неклассе (as.Date (e1)) - e2: не -numeri c аргумент бинарного оператора

Так что попробуйте:

training_date %>% {as_date(.) - 1} %>% toString()
#[1] "2020-03-31"
...