これに対する解決策を探し回っていますが、何も見つからないようです。
基本的に、大規模なデータにスケールアップしようとしているコードがあります。コードのサンプルの抜粋を以下に示します。
num_train <- 100
num_test <- 100
train <- data.table(k = rep(1,num_train), ID_train = 1:num_train, b_train = rnorm(num_train), c_train = rnorm(num_train), cat = sample(c("A", "B", "C", "D"), num_train, replace = TRUE))
test <- data.table(k = rep(1,num_test), ID_test = 1:num_test, b_test = rnorm(num_test), c_test = rnorm(num_test))
df <- merge(test,train, by="k")
これは、私が望むとおりに実行され、より大きなデータで使用すると非常に高速になります。(たぶん num_train * num_test = 2,000,000,000 と同じくらい大きい...)
ただし、問題は、結果のデータ テーブルが num_train*num_test 行だけ大きくなるため、R が処理するにはすぐに大きすぎることです。
num_train <- 1000
num_test <- 10000
train <- data.table(k = rep(1,num_train), ID_train = 1:num_train, b_train = rnorm(num_train), c_train = rnorm(num_train), cat = sample(c("A", "B", "C", "D"), num_train, replace = TRUE))
test <- data.table(k = rep(1,num_test), ID_test = 1:num_test, b_test = rnorm(num_test), c_test = rnorm(num_test))
df <- merge(test,train, by="k")
>Error: cannot allocate vector of size 76.3 Mb
私は、R と、filehash、ff、bigmemory などのパッケージのすべてのメモリ制約を認識しています (あまりよく知られていませんが、それらのいくつかを少し使用したことがあります)。これらにより、大きなファイルをデータベースとして設定し、それらからデータを効率的に読み取ることができるようです。
しかし、基本的に私が疑問に思っているのは、作成時にハードディスクにビットを書き込むなど、すでにメモリ内にあるテーブルから大きなテーブルを作成する方法はありますか? これらのパッケージのいずれかがこれで機能しますか? 他の解決策はありますか?
それとも、この仕事は R 向けではないのでしょうか?
乾杯!