我正在使用 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
语法转换为您正在使用的后端的查询代码。
使用 dbplyr
的 database
后端将产生 SQL
查询(作为 data.table
后端使用dtplyr 将产生 DT[i,j,by]
查询)。
show_query
不需要将应用于 data.frame
后端的 dplyr
语法转换为自身的方法,因此会出现错误您收到的消息。
获取 SQL
查询结果的简单方法是使用 memdb_frame
将 data.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/