当filter()
按日期查询并使用函数提供该日期时,我看到一个预期的错误:
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()
问题
为什么当filter()
通过类似 的函数提供日期时会看到错误as.character(today() - 730)
,而当日期由字符串提供时却没有?
笔记
- 类似的问题在这里
- 我尝试替换
as.character(today() - 730)
并as.Date(today() - 730)
得到完全相同的错误