0

私たちはすべての実験データを Sybase データベースに保管しています。データの操作と分析を行いたいときは、RODBC を使用してデータを R に読み込みます。

library(RODBC)
channellab <- odbcConnect("Labdata")
indivs <-sqlQuery(channellab,'SELECT * from CGS.Specimen')

これまでのところ、CGS.Specimen がラボの保有物全体のテーブルであることを除いて、非常に良好です。66 個の変数を持つほぼ 40000 の標本 (行) があります。特に、約 1000 の標本を含む 1 つの研究の所蔵にのみ関心がある場合は、読むのに不必要な時間がかかります。それを修正する明白な方法は

indivs <-sqlQuery(channellab,'SELECT * from CGS.Specimen WHERE StudyCode="RP"')  

しかし、私がそれを実行すると、

[1] "42S22 -143 [Sybase][ODBC Driver][Adaptive Server Anywhere]Column not found: Column 'RP' not found" "[RODBC] ERROR: Could not SQLExecDirect 'SELECT * from CGS.Specimen WHERE StudyCode=\ "RP\"'"

私は引用符で遊んだり、エスケープスラッシュで遊んだりしましたが、残念ながらどこにも行きませんでした.

例えば

indivs <-sqlQuery(channellab,'SELECT * from CGS.Specimen WHERE StudyCode= 'RP'  ')

エラー: "indivs <-sqlQuery(channellab,'SELECT * from CGS.Specimen WHERE StudyCode= 'RP" に予期しない記号があります

indivs <-sqlQuery(channellab,"SELECT * from CGS.Specimen WHERE StudyCode= 'RP'  ")

.Call(C_RODBCFetchRows, attr(channel, "handle_ptr"), max, buffsize, のエラー: 負の長さのベクトルは許可されていません

何を指示してるんですか?

4

2 に答える 2

4

あなたが報告する最後のエラーは、.Call 関数から c 関数 RODBCFetchRows へのものです。したがって、引用符に関する問題は解決されたようです。ただし、上記のエラーにはまだ問題があります。行が正しく報告されていない可能性があります (c 関数は、この値に基づいてベクトルを割り当てようとしますが、負の値をチェックしません)。試す:

indivs <-sqlQuery(channellab,"SELECT * from CGS.Specimen WHERE StudyCode= 'RP'", believeNRows = FALSE)
于 2010-09-01T23:45:41.867 に答える
2

編集:

indivs <-sqlQuery(channellab,'SELECT * from CGS.Specimen WHERE StudyCode=\'RP\'')  

いくつかのデータが返される別のクエリを実行できますか?

WHERE StudyCode=StudyCode例えば?これは -ve の長さについて同じエラーを出しますか?

これは、StudyCode をエスケープするために上記が正しいことを意味します。-Ve の長さは別のエラーです。* ですべての列を返すのではなく、null がない特定の列を返すことはできますか?

于 2010-09-01T20:53:12.147 に答える