我有一个5G行的数据集,太大而无法在R-base中导入。我的理解是this limit源于在向量上使用32位索引。因此,即使在64位版本的R中,也允许高达2 ^ 31-1的向量。
所以我正在探索 ff包。据说这个包装能够处理大型的包装。例如,数据集here和here。
但是当达到第2~32行时它会中断。我错过了什么吗?
library(ff)
probas.ff <- read.csv.ffdf(file="result.csv.gz"
,header=FALSE
,colClasses=c('numeric')
,col.names=c('proba')
,first.rows=100000
,VERBOSE=TRUE
)
这会产生以下错误:
read.table.ffdf 2143389345..2145486496 (2097152) csv-read=0.498sec ffdf-write=0.02sec
read.table.ffdf 2145486497..NA (2097152) csv-read=0.411sec
Error in if (v1 == d1) return(x) : missing value where TRUE/FALSE needed
In addition: Warning messages:
1: In N + n : NAs produced by integer overflow
2: In nff + n : NAs produced by integer overflow
仅供参考,作为B计划,我使用分离和征服策略使用RMySQL 运行良好但代码有点难看(欢迎评论)。作为第一步,我只想绘制直方图。
library(RMySQL)
con <- dbConnect(RMySQL::MySQL(), dbname = "blah")
rs1 <- dbSendQuery(con, "SELECT proba FROM xxx LIMIT 0,1999999999")
data1 <- dbFetch(rs1, n=-1)
rs2 <- dbSendQuery(con, "SELECT proba FROM xxx LIMIT 2000000000,1999999999")
data2 <- dbFetch(rs2, n=-1)
rs3 <- dbSendQuery(con, "SELECT proba FROM xxx LIMIT 4000000000,1999999999")
data3 <- dbFetch(rs3, n=-1)
breaks <- seq(0,1,0.001)
h1 <- hist(data1$proba,breaks=breaks,plot=FALSE)
h2 <- hist(data2$proba,breaks=breaks,plot=FALSE)
h3 <- hist(data3$proba,breaks=breaks,plot=FALSE)
all.counts <- as.double(h1$counts) + as.double(h2$counts) + as.double(h3$counts)
png("hist.png")
barplot(all.counts)
dev.off()