sql - 如何解决错误 "no applicable method for ' show_query'应用于类 "data.frame"的对象“

标签 sql r dplyr data-manipulation dbplyr

我正在使用 R 编程语言。我正在尝试使用“show_query()”选项将“dplyr/dbplyr”代码转换为 SQL 代码。

例如,我尝试运行以下代码:

#first code

library(dplyr)
library(dbplyr)

data(iris)

 iris %>% 
 filter(Species == "setosa")  %>% 
  summarise(mean.Sepal.Length = mean(Sepal.Length),
            mean.Petal.Length = mean(Petal.Length))  %>% show_query()

但是,这会返回以下错误(注意:当您删除“show_query()”时,上面的代码实际上会运行):

Error in UseMethod("show_query") : 
  no applicable method for 'show_query' applied to an object of class "data.frame"

我想我找到了解决这个问题的方法:

#second code

> con <- DBI::dbConnect(RSQLite::SQLite(), ":memory:")

> flights <- copy_to(con, iris)

> flights %>% 
    filter(Species == "setosa")  %>% 
     summarise(mean.Sepal.Length = mean(Sepal.Length),
              mean.Petal.Length = mean(Petal.Length))  %>% show_query()


<SQL>
SELECT AVG(`Sepal.Length`) AS `mean.Sepal.Length`, AVG(`Petal.Length`) AS `mean.Petal.Length`
FROM `iris`
WHERE (`Species` = 'setosa')

Warning message:
Missing values are always removed in SQL.
Use `mean(x, na.rm = TRUE)` to silence this warning
This warning is displayed only once per session. 

谁能告诉我为什么我尝试的原始代码不起作用,但第二个代码起作用?为什么需要建立连接并添加“copy_to”语句——即使我想在本地运行某些东西?我只是对将 DPLYR 代码转换为 SQL 感到好奇——此时,我只想在本地运行所有内容,而不是连接到远程数据库。因此,如果我想在本地运行它,为什么需要建立连接?为什么原始代码中的 show_query() 语句不起作用?

最佳答案

show_query()dplyr 语法转换为您正在使用的后端的查询代码。

使用 dbplyrdatabase 后端将产生 SQL 查询(作为 data.table 后端使用dtplyr 将产生 DT[i,j,by] 查询)。

show_query 不需要将应用于 data.frame 后端的 dplyr 语法转换为自身的方法,因此会出现错误您收到的消息。

获取 SQL 查询结果的简单方法是使用 memdb_framedata.frame 转换为内存数据库:

memdb_frame(iris) %>% 
  filter(Species == "setosa")  %>% 
  summarise(mean.Sepal.Length = mean(Sepal.Length),
            mean.Petal.Length = mean(Petal.Length))  %>% show_query()

<SQL>
SELECT AVG(`Sepal.Length`) AS `mean.Sepal.Length`, AVG(`Petal.Length`) AS `mean.Petal.Length`
FROM `dbplyr_002`
WHERE (`Species` = 'setosa')

关于sql - 如何解决错误 "no applicable method for ' show_query'应用于类 "data.frame"的对象“,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70223916/

相关文章:

r - 错误 : could not find function "read_excel" using R on Mac

r - 为具有特定条件的标志创建 id 序列

r - tidyr::pivot_longer() 用于多组匹配的名称/值

sql - 如何合并配置单元中现有分区中的小文件?

sql - H2。将字符串插入 VARBINARY(255)

php - 使用 MYSQL 命令行进行 SQL 导入/导出

从整个数据帧中删除 R 中的特定值

sql - 如何在 SQL Server 中将逗号分隔值拆分到各自的列中?

R:如何将数字插入有序向量

r - n() 在 summarise_at() 中使用时行为不一致