0

我寻找一个处理大数据的解决方案。所以我尝试了“ff包”。在我的普通脚本中,我使用以下代码在 66896 x 362 data.frame 中进行选择:

setwd(wd)
bf <- read.table("G_BANKFULL_km3month.csv",header=T, sep=",",dec=".")


## read river discharge global, monthly vlaues 1971-2000##
memory.limit(size=16000)   # increase RAM
dis <- read.table('RIVER_AVAIL_7100_WG22.txt', header=T, sep="\t", dec=".")
##


## return only grid cells where bankfull is exceeded at least once during the time 
## period
test <- cbind(dis,bf$VALUE)
test2 <- test[(test[,-c(1:3)] > test[,length(test)]), ]

如果我使用足够的 RAM,它可以工作。但是我没有足够的内存来进行这样的操作,所以我尝试了“ff 包”。

library(ff)
## read Bankfull flow##
setwd(wd)
bf <- read.csv.ffdf(file="G_BANKFULL_km3month.csv",header=TRUE)
## read river discharge global, monthly vlaues 1971-2000##
memory.limit(size=16000)   # increase working memory
dis <- read.table.ffdf(file='RIVER_AVAIL_7100_WG22.txt', header=T, sep="\t", dec=".")
##read bankfull values as ff object##
bfvalues <- ff(bf[,2])
##combination of bf and dis ( see test <- cbind(dis,bf$VALUE))
dis_bf <- do.call('ffdf', c(physical(dis), list(bfvalues=bfvalues)))

dis_bf_test <-  dis_bf[(dis_bf[,-c(1:3)] > dis_bf[,length(dis_bf)]),]

ffdf 和普通 data.frame 具有相同的结构等,但如果我尝试最后一次选择它不起作用,我会收到以下错误:

Error in as.hi.matrix(i, maxindex = nvw$n, vw = nvw$vw, pack = FALSE,  : 
argument "dim" is missing, with no default

也许你们中的一些人使用过 ff 包并且知道它为什么不起作用。对于其他处理大数据的软件包和解决方案的一些想法或信息,我也很高兴。干杯

4

1 回答 1

0

你为什么不替换你的代码

dis_bf_test <-  dis_bf[(dis_bf[,-c(1:3)] > dis_bf[,length(dis_bf)]),]

require(ffbase)
open(dis_bf_test)
dis_bf_test <- subset(dis_bf_test, yourcolumnname > youothercolumnname)

其中 yourcolumnname 表示您指定的列,yourothercolumnname 表示您指定dis_bf[,-c(1:3)]的列dis_bf[,length(dis_bf)]

于 2013-08-12T10:47:48.000 回答