一尘不染

在sqldf中处理引号

sql

我想使用sqldf并能够完全像在sql命令终端中一样编写SQL语句。

例如,这是来自手册的查询:

Gavg <- sqldf("select g, avg(v) as avg_v from DF group by g")

如果我正在使用单独的SQL文件,则查询将被编写为:

select g,
avg(v) as avg_v
from "DF"
group by g

但是,如果我将其编写为:

Gavg <- sqldf("
    select g,
    avg(v) as avg_v
    from "DF"
    group by g
")

我希望能够将代码段复制/粘贴到sqldf(“”)周围的区域中,而不必转引号或不必引用包含该命令的外部sql文件。

这可能吗?


阅读 143

收藏
2021-05-16

共1个答案

一尘不染

对于您的用例,最简单的方法可能就是编写一些包装函数,为您转义所有这些字符。例如这样的事情应该工作:

escape.quote <- function(){
  s <- paste(scan(what=character(),sep="\n"),collapse=" ")
  s <- gsub('"','\"',s)
  s <- gsub("'","\'",s)
  return(s)
}

然后,您可以将其插入sqldf()通话中,然后将查询复制并粘贴到此处。像这样:

> library(sqldf)
> set.seed(2)
> DF <- data.frame(g=rep(1:2,5),v=rnorm(10))
> sqldf(escape.quote())
1: select g,
2: avg(v) as avg_v
3: from "DF"
4: group by g
5: 
Read 4 items
  g      avg_v
1 1  0.6606215
2 2 -0.2383182
2021-05-16