我们将所有实验室数据保存在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驱动程序] [Adaptive Server Anywhere]未找到列:未找到列'RP'”“[RODBC]错误:无法从CGS.Specimen中获取SQLExecDirect'SELECT * WHERE StudyCode = \“RP \”'“
我玩了引号,我玩过逃生斜线,但唉,我已经无处可去了。
例如
indivs <-sqlQuery(channellab,'SELECT * from CGS.Specimen WHERE StudyCode= 'RP' ')
错误:“indivs&lt; -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,出错: 不允许使用负长度载体
你有什么建议?
答案 0 :(得分:4)
您报告的最后一个错误是从.Call函数到c函数RODBCFetchRows。因此,您的引号问题似乎已得到解决。但是,由于上述错误,您仍然有问题。可能行未正确报告(c函数尝试根据此值分配向量,但不检查负值)。尝试:
indivs <-sqlQuery(channellab,"SELECT * from CGS.Specimen WHERE StudyCode= 'RP'", believeNRows = FALSE)
答案 1 :(得分:2)
编辑:
indivs <-sqlQuery(channellab,'SELECT * from CGS.Specimen WHERE StudyCode=\'RP\'')
好的,您可以运行另一个查询,其中返回一些数据?
例如 WHERE StudyCode=StudyCode
?这是否会给出与-ve长度相同的错误?
这意味着上述内容对于转义StudyCode是正确的。 -Le长度是另一个错误。你能不能返回所有带有*但没有空值的特定列的列吗?
答案 2 :(得分:2)
尝试选项believeNRows = FALSE。这对我来说是一个类似的错误(负长度错误)。