2013-09-08 1 views
0

Я хочу использовать sqldf и иметь возможность писать инструкции SQL точно так же, как они будут записаны в командном терминале sql.Обработка кавычек в sqldf

Например, вот запрос от руководства:

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

Вы можете использовать одинарные кавычки внутри двойных кавычек и наоборот. –

ответ

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