令人讨厌的“功能”(或错误?)为RODBC

时间:2012-01-30 10:56:18

标签: r import odbc xls rodbc

RODBC是R中用于将数据从数据库导入R的主库。RODBC似乎能够“猜测”列的数据类型,我觉得它特别烦人。

我上传了一个文件test.xls here,或者您可以自己创建一个xls文件:

  1. 创建2列,第一列名为col_a,第二列名为col_b
  2. col_a中键入您喜欢的任何内容,我在此列中键入了92行
  3. 字母
  4. 在col_b的第92行,输入一个数字,我输入“1923”而不更改数据类型(即不使用'
  5. 尝试使用以下脚本将xls文件导入R:

  6. library(RODBC)
    
    setwd("C:/Users/hke775/Documents/Enoch/MISC/R_problems/RODBC")
    channel <- odbcConnectExcel("test.xls",readOnly=TRUE)
    dummy.df <- sqlFetch(channel,"Sheet1")
    odbcClose(channel)
    

    您会在dummy.df中看到col_b全部为NA,此列中的1923已消失。

    如果您想再次看到1923,可以将col_b的第一行更改为一个数字,然后又返回。

    这非常烦人,因为我不喜欢手动修改数据。我需要使用其他包来进行xls导入,但是我发现其他包不像RODBC那样顺畅(我试过gdataxlsReadWrite)。

    我在sqlFetch命令中遗漏了什么,造成了麻烦吗?感谢。

1 个答案:

答案 0 :(得分:8)

请不要责怪R或RODBC Microsoft's bugs ...;)

  

但是,由于ODBC驱动程序中的错误,请指定要扫描的行   (MaxScanRows)设置目前无效。换句话说,   Excel ODBC驱动程序(MDAC 2.1和更高版本)始终扫描前8行   在指定的数据源中,以确定每个列的   数据类型。

     

有关“扫描行”错误的其他信息,包括a   简单的解决方法,单击下面的文章编号查看该文章   在Microsoft知识库中:

     

189897 XL97:数据   使用Excel ODBC驱动程序截断为255个字符

我通过将TypeGuessRows值设置为0来尝试KB189897中的修复,看看会发生什么!

> library(RODBC)
> channel <- odbcConnectExcel("test.xls",readOnly=TRUE)
> tail(dummy.df <- sqlFetch(channel,"Sheet1"))
   col_a col_b
87     c    NA
88     d    NA
89     e    NA
90     f    NA
91     g    NA
92     h  1923
> odbcClose(channel)

请不要上票或复选标记......只需发送现金。 :)