Есть ли лучший способ закодировать этот sqlQuery в R?

StackOverflow https://stackoverflow.com/questions/2333436

  •  22-09-2019
  •  | 
  •  

Вопрос

Я пишу сценарий R, чтобы получить некоторые данные из базы данных, а затем что-то с ними сделать, используя пакет RODBC.В настоящее время все мои команды sqlQuery представляют собой одну длинную строку;

stsample<-sqlQuery(odcon, paste"select * from bob.DESIGNSAMPLE T1, bob.DESIGNSUBJECTGROUP T2, bob.DESIGNEVENT T3, bob.CONFIGSAMPLETYPES T4 WHERE T1.SUBJECTGROUPID = T2.SUBJECTGROUPID AND T1.TREATMENTEVENTID = T3.TREATMENTEVENTID AND T1.SAMPLETYPEKEY = T4.SAMPLETYPEKEY AND T1.STUDYID = T2.STUDYID AND T1.STUDYID = T3.STUDYID AND T1.STUDYID = ", chstudid, sep=""))
head(stsample)

который выглядит некрасиво и его трудно читать/обновлять.Я пробовал помещать их в несколько строк, но тогда мешались символы новой строки, в настоящее время мне лучше всего использовать много вставок;

stsample<-sqlQuery(odcon,
    paste(
        "select ",
            "* ", 
        "from ", 
            "BOB.DESIGNSAMPLE T1, ",
            "BOB.DESIGNSUBJECTGROUP T2, ",
            "BOB.DESIGNEVENT T3, ",
            "BOB.CONFIGSAMPLETYPES T4 ",
        "WHERE ",
            "T1.SUBJECTGROUPID = T2.SUBJECTGROUPID ",
            "AND T1.TREATMENTEVENTID = T3.TREATMENTEVENTID ",
            "AND T1.SAMPLETYPEKEY = T4.SAMPLETYPEKEY ",
            "AND T1.STUDYID = T2.STUDYID ",
            "AND T1.STUDYID = T3.STUDYID ",
            "AND T1.STUDYID = ",chstudid,
        sep="")
    )
head(stsample)

Но мне не нравится заключать каждую строку в кавычки и правильно писать пробелы.Есть ли способ лучше ?

Это было полезно?

Решение

Я бы использовал что-то вроде этого:

stsample<-sqlQuery(odcon,
    paste("
####DATASET CONSTRUCTION QUERY #########
    select 
    *  
    from 
    BOB.DESIGNSAMPLE T1, 
    BOB.DESIGNSUBJECTGROUP T2, 
    BOB.DESIGNEVENT T3, 
    BOB.CONFIGSAMPLETYPES T4 
    WHERE 
    T1.SUBJECTGROUPID = T2.SUBJECTGROUPID 
    AND T1.TREATMENTEVENTID = T3.TREATMENTEVENTID 
    AND T1.SAMPLETYPEKEY = T4.SAMPLETYPEKEY 
    AND T1.STUDYID = T2.STUDYID 
    AND T1.STUDYID = T3.STUDYID 
    AND T1.STUDYID = 
###################################   
    ", as.character(chstudid), sep="")
    )

Другие советы

А как насчет использования gsub(" ", " ", "длинная многострочная строка выбора") вместо вставки?

Это действительно старый вопрос, но думаю, что это может быть кому-то полезно.

Одна вещь, которую я нашел полезной, это GetoptLong пакет, который предоставляет функцию qq().Я думаю, что он вдохновлен Perl, но по сути он обеспечивает способ создания многострочной строки с простой интерполяцией переменных.Например:

library(GetoptLong)

tableName <- "myTable"
id <- 42

sqlQuery(odcon, qq("
    SELECT * FROM @{tableName}
    WHERE id = @{id}
    LIMIT 1
")

Очевидно, я должен упомянуть обычное предостережение о том, что это плохая идея, если вы работаете напрямую с пользовательским вводом, и в этом случае было бы лучше использовать какой-то подготовленный оператор.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top