2010-02-25 90 views
3

我正在编写一个R脚本来获取一些数据库数据,然后使用RODBC软件包进行一些操作。目前我所有的sqlQuery命令都是一个长字符串;有没有更好的方式来编写R中的这个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) 

但我不喜欢在everyline周围加上引号,并且让我的空白正确。有没有更好的办法 ?

+0

看看http://stackoverflow.com/questions/1630724/can-i-gracefully-include-formatted-sql-strings-in-an-r-script – Marek 2010-02-25 11:07:18

+1

这个问题和一个马立克链接太暗示了新的生产线问题。我在下面的回答中使用了gd047使用的粘贴语法,并且没有新的换行符问题。我在SQL Server和Oracle中都使用了这种语法。什么数据库让你对新的行语法感到悲伤? – 2010-02-25 17:01:41

+0

由于换行符,我没有任何错误,我只是对他们有一种不好的感觉,但也许这是我错了......(数据库是甲骨文,如果它很重要) – PaulHurleyuk 2010-02-25 17:50:28

回答

6

我会用这样的:

关于使用GSUB
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

什么( “\ n”, “”, “长多选择string”)而不糊?