1
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 ,将其变回日期,减去一天,然后将其变回单个链中的字符串?

4

1 回答 1

2

-1是问题。

这有效:

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

但这不是

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

unclass(as.Date(e1)) - e2 中的错误:二元运算符的非数字参数

所以尝试:

training_date %>% {as_date(.) - 1} %>% toString()
#[1] "2020-03-31"
于 2020-04-15T03:26:24.377 回答