Far*_*rel 0 r rodbc sybase-asa
我们将所有实验室数据保存在 Sybase 数据库中。当我想要进行数据操作和分析时,我使用 RODBC 将数据读入 R。
library(RODBC)
channellab <- odbcConnect("Labdata")
indivs <-sqlQuery(channellab,'SELECT * from CGS.Specimen')
Run Code Online (Sandbox Code Playgroud)
到目前为止一切顺利,除了 CGS.Specimen 是我们整个实验室资产的表格。有近40000个样本(行),66个变量。阅读起来花费了不必要的时间,尤其是当我只对一项包含大约 1000 个标本的研究的持有量感兴趣时。解决这个问题的明显方法是
indivs <-sqlQuery(channellab,'SELECT * from CGS.Specimen WHERE StudyCode="RP"')
Run Code Online (Sandbox Code Playgroud)
但是当我跑的时候我得到了
[1] "42S22 -143 [Sybase][ODBC 驱动程序][Adaptive Server Anywhere]未找到列:未找到列 'RP'" "[RODBC] 错误:无法 SQLExecDirect 'SELECT * from CGS.Specimen WHERE StudyCode=\ “RP\”“”
我玩过引号,也玩过转义斜杠,但可惜我一无所获。
例如
indivs <-sqlQuery(channellab,'SELECT * from CGS.Specimen WHERE StudyCode= 'RP' ')
Run Code Online (Sandbox Code Playgroud)
错误:“indivs <-sqlQuery(channellab,'SELECT * from CGS.Specimen WHERE StudyCode= 'RP”中出现意外符号
indivs <-sqlQuery(channellab,"SELECT * from CGS.Specimen WHERE StudyCode= 'RP' ")
Run Code Online (Sandbox Code Playgroud)
.Call(C_RODBCFetchRows, attr(channel, "handle_ptr"), max, buffsize, 中的错误:不允许负长度向量
你有什么建议?
您报告的最后一个错误是从 .Call 函数到 c 函数 RODBCFetchRows 的。因此,您的引号问题似乎已经解决。但是,由于上述错误,您仍然遇到问题。也许行未正确报告(c 函数尝试根据该值分配向量,但不检查负值)。尝试:
indivs <-sqlQuery(channellab,"SELECT * from CGS.Specimen WHERE StudyCode= 'RP'", believeNRows = FALSE)
Run Code Online (Sandbox Code Playgroud)