Обработка кавычек в 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, содержащий команду.

Это возможно?


person d_a_c321    schedule 08.09.2013    source источник
comment
Вы можете использовать одинарные кавычки внутри строк с двойными кавычками и наоборот.   -  person Ferdinand.kraft    schedule 08.09.2013


Ответы (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
person David    schedule 08.09.2013