我在Access数据库(称为State)中有两个表,我正在尝试读入R。
第一个表(Citation)有213个记录x 47个字段。当我尝试访问r中的数据集时,会抛出内存分配错误:
> library(RODBC)
> db <- "state.mdb"
> qry <- "SELECT * FROM Citation"
> con2 <- odbcConnect("StateDB")
> tbl <- sqlQuery(con2, qry)
Error in odbcQuery(channel, query, rows_at_time) :
'Calloc' could not allocate memory (107374182400 of 1 bytes)
In addition: Warning messages:
1: In odbcQuery(channel, query, rows_at_time) :
Reached total allocation of 10000Mb: see help(memory.size)
然而在同一个数据库中,一个名为Collision的更大的表(298,645个记录x 40个字段)不会抛出任何类型的错误并在R中完美显示。
是什么给出的?
我尝试了以下内容:
- 使用memory.limit(size = 1000)将R可用的内存从8055增加到10,000
- 将计算机中的RAM量增加到8 GB
- 将我的R版本改为32位(这给了我一个'ODBC Connection Failed'消息,所以我切换回64位)
你会认为更大的表会抛出内存错误,而不是更小的表,所以我想知道是否还有其他事情发生。特别是因为它看起来需要的内存量非常大(107374182400字节??)
我对R比较陌生,所以任何帮助都会非常感激。我正在使用Windows 7和RStudio,64位,8 GB RAM。
答案 0 :(得分:1)
显然RODBC不喜欢Access表中的OLE Object字段。删除它们(或者可能只是从SELECT语句的列列表中省略它们)似乎可以避免这个问题。