2010-02-25 2 views
3

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

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) 

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

+0

Посмотрите на http://stackoverflow.com/questions/1630724/can-i-gracefully-include-formatted-sql-strings-in-an-r-script – Marek

+1

Этот вопрос и один Marek связывают также оба ссылаются на проблемы с новыми строками. Я использую синтаксис пасты, как gd047 использует в своем ответе ниже и не имеет проблем с новыми строками. Я использовал этот синтаксис как с SQL Server, так и с Oracle. Какая база данных дает вам печаль о новом синтаксисе строк? –

+0

У меня не было никаких ошибок в результате переводов строк, у меня просто было плохое чувство их наличия, но, возможно, это я ошибаюсь ... (db - оракул, если это имеет значение) – PaulHurleyuk

ответ

6

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

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="") 
    ) 
2

Что об использовании GSUB ("\ п", "", "длинный многострочный выберите строку") вместо пасты?

Смежные вопросы