处理sqldf中的引号

时间:2013-09-08 16:37:58

标签: sql r sqldf

我想使用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文件。

这可能吗?

1 个答案:

答案 0 :(得分: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