【问题标题】:annoying "feature" (or bugs?) for RODBCRODBC 烦人的“功能”(或错误?)
【发布时间】:2012-02-22 04:21:29
【问题描述】:

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

我已经上传了一个文件test.xlshere,或者你可以自己创建一个xls文件:

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

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 那样流畅(我试过gdata 和xlsReadWrite)。

我是否遗漏了sqlFetch 命令中的任何内容并导致了问题?谢谢。

【问题讨论】:

  • 你确定你试过 gdata 吗?当我使用 DF &lt;- read.xls("test.xls") 使用 gdata 包尝试您的测试文件时,它起作用了。 1923 在场。
  • Gdata 需要有 perl,我不能在我的办公室安装它
  • 如果权力可以安装 R 那么他们也应该安装 Rtools 发行版,因为这是 R 开发所必需的并且其中包含 perl:cran.r-project.org/bin/windows/Rtools
  • 所以我的问题被认为是RODBC的错误?
  • 这可能是 ODBC 驱动程序而不是 RODBC 本身的问题。

标签: r import odbc xls rodbc


【解决方案1】:

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

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

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

189897XL97:数据 使用 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)

请不要投赞成票或复选标记...只需发送现金即可。 :)

【讨论】:

  • 太棒了。但是我们是否应该得出结论,没有管理员权限的用户没有解决方案?
  • 最好将 TypeGuessRows 设置为 24 或任何足够深的设置。但是 0 会进行无限扫描,会影响性能。 (我正在阅读数千个非结构化 .xls/.xlsx 文件)
  • @Langeleppel:是的,设置为 0 会影响性能,但会保证正确性。设置为 24(或任何其他非零值)只有在对于受影响系统上读取的所有未来 xls/xlsx 文件“足够深”时才是正确的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-21
  • 2013-03-01
  • 1970-01-01
  • 2014-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多