lm()
大規模な販売データセットに対する R の適合性を見積もろうとしています。データ自体は、R が処理できないほど大きくはありません。メモリは約250MB。問題はlm()
、すべての変数と交差項を含めるために が呼び出されると、 の構築でmodel.matrix()
、マシンのメモリが不足し、サイズのベクトル (この場合は約 47GB) を割り当てることができないというエラーがスローされることです。当然のことながら、私はそれほど多くの RAM を持っていません。問題は、ff
、bigmemory
、およびfilehash
パッケージを試してみたことです。これらはすべて、既存のファイルを使用してメモリ外で作業する場合に問題なく動作します (特に のデータベース機能が気に入っていますfilehash
)。しかし、私は私の人生のために、得ることはできませんmodel.matrix
まったく作成されません。問題は、出力ファイルを私が作成したデータベースにマッピングしたにもかかわらず、R がとにかくそれを RAM に設定しようとして、できないことだと思います。これらのパッケージを使用してこれを回避する方法はありますか、それとも何か間違っていますか? [また、biglm
および他の関数を使用してチャンク単位で処理しても、一度に 1 つずつチャンクすることさえできません。model.matrix
繰り返しますが、R はチャンクする前に最初に全体を作成しようとしているようです]
どんな助けでも大歓迎です!
library(filehash)
library(ff)
library(ffbase)
library(bigmemory)
library(biganalytics)
library(dummies)
library(biglm)
library(dplyr)
library(lubridate)
library(data.table)
SID <- readRDS('C:\\JDA\\SID.rds')
SID <- as.data.frame(unclass(SID)) # to get characters as Factors
dbCreate('reg.db')
db <- dbInit('reg.db')
dbInsert(db, 'SID', SID)
rm(SID)
gc()
db$summary1 <-
db$SID %>%
group_by(District, Liable, TPN, mktYear, Month) %>%
summarize(NV.sum = sum(NV))
start.time <- Sys.time()
# Here is where it throws the error:
db$fit <- lm(NV.sum ~ .^2, data = db$summary1)
Sys.time() - start.time
rm(start.time)
gc()
summary(fit)
anova(fit)