Domanda

Sto scrivendo uno script in R per ottenere alcuni dati del database e quindi fare cose con esso, utilizzando il pacchetto RODBC. Attualmente tutti i miei comandi sqlquery sono una lunga serie;

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)

che sembra brutto ed è difficile da leggere / aggiornamento. Ho provato a mettere le righe, ma poi i personaggi nuova linea di mettersi in cammino, Attualmente il mio migliore è questo utilizzando un sacco di pasta di;

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)

Ma non mi piace dover mettere tra virgolette everyline, e ottenere il mio spazio bianco corretta. C'è un modo migliore?

È stato utile?

Soluzione

Vorrei usare qualcosa di simile:

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

Altri suggerimenti

Cosa succede ad usare gsub ( "\ n", "", "lungo multilinea selezionare stringa") al posto della pasta?

Questa è una domanda molto vecchio, ma ho pensato che questo potrebbe essere utile a qualcuno.

Una cosa che ho trovato utile è la GetoptLong pacchetto, che fornisce la funzione qq (). Credo che si ispira a Perl, ma essenzialmente fornisce un modo per fare una stringa multilinea con facile interpolazione variabile. Ad esempio:

library(GetoptLong)

tableName <- "myTable"
id <- 42

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

Ovviamente dovrei menzionare la solita avvertenza che si tratta di una cattiva idea se si sta lavorando direttamente con l'input dell'utente e sarebbe meglio utilizzare un qualche tipo di dichiarazione preparata in quel caso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top