【发布时间】:2020-04-10 06:35:35
【问题描述】:
当 filter()ing 按日期并使用函数提供该日期时,我看到了预期的错误:
library(tidyverse)
library(bigrquery)
table1 %>%
filter(date > as.character(today() - 730)) %>%
tally()
# Error: No matching signature for operator - for argument types: DATE, FLOAT64.
Supported signatures: INT64 - INT64; NUMERIC - NUMERIC; FLOAT64 - FLOAT64 at [29:29] [invalidQuery]
但是当日期作为字符串提供时,它可以正常工作
table1 %>%
filter(date > '2018-04-11') %>%
tally()
# n
# <int>
# 623451234
我可以确认as.character(today() - 730) 和'2018-04-11' 是一样的
> identical(as.character(today() - 730), '2018-04-11')
[1] TRUE
以下解决方法可以,但对于较大的代码库会变得混乱:
date_from <- as.character(today() - 730)
table1 %>%
filter(date > date_from) %>%
tally()
问题
为什么当通过as.character(today() - 730) 之类的函数向filter() 提供日期时会看到错误,而当日期是通过字符串提供时却没有?
注意事项
- 类似问题here
- 我尝试将
as.character(today() - 730)替换为as.Date(today() - 730)并得到完全相同的错误
【问题讨论】: