max(.) 中的错误:使用 dplyr dbplyr 和 bigrquery 时参数的“类型”(列表)无效

Posted

技术标签:

【中文标题】max(.) 中的错误:使用 dplyr dbplyr 和 bigrquery 时参数的“类型”(列表)无效【英文标题】:Error in max(.) : invalid 'type' (list) of argument when using dplyr dbplyr and bigrquery 【发布时间】:2019-12-04 00:48:40 【问题描述】:

我正在使用 dbplyr 在 bigquery 表上运行一些非常简单的 dplyr 代码

transactions %>% select(date) %>% max(.)

产生错误

max(.) 中的错误:参数的“类型”(列表)无效

我已经检查过了

我按预期查询的表(确实如此 - 其他 dplyr 操作有效) 我可以过滤可能的 NA,但没有删除记录(没有 NA)

另请注意,类似 data.frame 上的类似代码似乎可以工作,例如

iris %>% select(Sepal.Length) %>% max
# [1] 7.9

【问题讨论】:

你检查str(transactions)的输出了吗? transactions %>% select(date) %>% print(.) 长什么样子?它会产生错误还是看起来很古怪? 【参考方案1】:

你试过 max(unlist(.)) 吗?

举个例子:

my.list = list(1,2,3,4)
# This produces an error
max(my.list)
# This produces 4
max(unlist(my.list))

你也可以试试 do.call(max,my.list)。

【讨论】:

【参考方案2】:

dbplyr 所做的大部分工作是将dplyr 命令转换为数据库代码(在您的情况下为 bigquery)。这样做的代价是并非所有的 R 命令都可以翻译。一般来说,您需要遵循标准的dplyr 语法来定义翻译。

所以当

transactions %>% select(date) %>% max(.)

适用于 R 数据框。 max(.) 可能没有在您使用的上下文中定义的翻译。

但是以下应该可以工作,因为它遵循标准的dplyr 语法:

transactions %>% select(date) %>% summarise(max_date = max(date))

因此dbplyr 可以将其翻译成数据库代码。

要检查dbplyr 已翻译的底层数据库查询,您可以使用命令show_query()。例如:

transactions %>% select(date) %>% summarise(max_date = max(date) %>% show_query()

【讨论】:

以上是关于max(.) 中的错误:使用 dplyr dbplyr 和 bigrquery 时参数的“类型”(列表)无效的主要内容,如果未能解决你的问题,请参考以下文章

dplyr 按行求和和其他函数,如 max

更新 dplyr,dplyr::select_vars 中的错误

将变量名称传递给另一个函数中的 dplyr 函数会返回找不到对象错误

dplyr 组不使用美元符号 data$column 语法

使用 dplyr 计算分组数据中相关性的显着性

R package dplyr 重新安装每个实例