4

RODBCパッケージを使用して、データベースデータを取得し、それを処理するRスクリプトを作成しています。現在、私のすべてのsqlQueryコマンドは1つの長い文字列です。

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)

しかし、すべての行を引用符で囲み、空白を正しくするのは好きではありません。もっと良い方法はありますか?

4

3 に答える 3

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="")
    )
于 2010-02-25T12:18:29.790 に答える
2

貼り付けの代わりにgsub( "\ n"、 ""、 "long multiline select string")を使用するのはどうですか?

于 2010-02-25T15:21:47.017 に答える
0

これは本当に古い質問ですが、これは誰かに役立つかもしれないと思いました。

私が便利だと思ったのは、qq()関数を提供するGetoptLongパッケージです。Perlに触発されたと思いますが、基本的には、簡単な変数補間を使用して複数行の文字列を作成する方法を提供します。例えば:

library(GetoptLong)

tableName <- "myTable"
id <- 42

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

明らかに、ユーザー入力を直接操作している場合、これは悪い考えであり、その場合は何らかのプリペアドステートメントを使用する方がよいという通常の警告に言及する必要があります。

于 2019-07-02T09:51:29.160 に答える