烦人的“功能” (或错误?)对于 RODBC

发布于 2025-01-01 09:11:04 字数 1043 浏览 1 评论 0原文

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

我已在此处上传了一个文件test.xls,或者您也可以自己创建一个 xls 文件:

  1. 创建 2 列,第一列名为 col_a,第二列名为 col_b
  2. col_a 中输入您喜欢的任何内容,我在 col_b 第 92 行的 92 行中输入了字母
  3. ,在那里输入了一个数字,我输入了“1923”,但没有更改数据类型(即不使用 < code>')
  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 那样顺利(我尝试了 gdataxlsReadWrite)。

我是否在 sqlFetch 命令中遗漏了任何内容并导致了麻烦?谢谢。

RODBC is the main library in R to import data from a database into R. RODBC seems to have the ability of "guess" the datatype of the column which I find it particularly annoying.

I have uploaded a file test.xls here, or you may create a xls file yourself:

  1. create 2 columns, first column named col_a and the second column named col_b.
  2. type whatever you like in col_a, I typed letters on this column for 92 rows
  3. at the 92th row of col_b, type a number there, I typed "1923" without changing the data type (i.e. not using ')
  4. try to import the xls file into R using the following script:

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)

You will see that in dummy.df, col_b is all NA, the 1923 in this column is gone.

If you want to see the 1923 again, you can change the 1st row of col_b to a number, and it is back again.

This is very annoying as I don't prefer modifying data manually. I need to use other package to do the xls importing, but I can't find other packages do as smooth as RODBC (I tried gdata and xlsReadWrite).

Did I missing anything in the sqlFetch command, and cause the trouble? Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

醉酒的小男人 2025-01-08 09:11:04

请不要将 Microsoft 的错误归咎于 R 或 RODBC...;)

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

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

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

我通过设置TypeGuessRows 值为 0,看看会发生什么!

> 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)

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

Please don't blame R or RODBC for Microsoft's bugs... ;)

However, due to a bug in the ODBC driver, specifying the Rows to Scan
(MaxScanRows) setting currently has no effect. In other words, the
Excel ODBC driver (MDAC 2.1 and later) always scans the first 8 rows
in the specified data source in order to determine each column's
datatype.

For additional information about the Rows to Scan bug, including a
simple workaround, click the article number below to view the article
in the Microsoft Knowledge Base:

189897 XL97: Data
Truncated to 255 Characters with Excel ODBC Driver

I tried the fix in KB189897 by setting the TypeGuessRows value to 0 and look what happens!

> 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)

Please, no up-votes or check marks... just send cash. :)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文