ビッグデータを扱うソリューションを探しています。そこで「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を使用すれば機能します。しかし、そのような操作に十分な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 パッケージで作業したことがあり、それが機能しない理由を知っています. また、ビッグデータを扱うための他のパッケージやソリューションのアイデアや情報についても嬉しく思います。乾杯