0

我们将所有实验室数据保存在 Sybase 数据库中。当我想做数据操作和分析时,我使用 RODBC 将数据读入 R。

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

到目前为止一切顺利,除了 CGS.Specimen 是我们整个实验室所有的表格。有近 40000 个样本(行),有 66 个变量。阅读需要花费不必要的时间,尤其是当我只对一项拥有大约 1000 个标本的研究感兴趣时。解决它的明显方法是

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 长度是另一个错误。您能否返回不是所有带有 * 的列,而是返回没有空值的特定列?

于 2010-09-01T20:53:12.147 回答