約 6000 万行と 150 列 (合計約 90 億要素) の大きな行列があります。このデータをbig.matrix
オブジェクトに保存しました( package からbigmemory
)。ここで、各行の合計を計算したいと思います。これは列指向であるため問題です。すべての集計関数が列指向であり (例: 、など)、使用可能な関数がないbig.matrix
ことがわかる限り、行の合計を計算するためのデフォルト。もちろんできますが、これには非常に長い時間がかかります。列を 1 つずつループし、ベクトル化された加算を使用して列を追加することもできます。colsum
colmax
apply(x, 1, sum)
mysum <- rep(0, nrow(x))
for (i in seq(ncol(x)))
mysum <- mysum + x[,i]
しかし、これにはまだ 20 分以上かかります。また、ループのたびに新しい 6000 万要素のベクトルを作成しているため、明らかに最適ではありません。これを行うためのより速い方法が必要なようです。
編集
一度に 100 万行ほどのチャンクを処理し、それらに対して rowSums を呼び出し、結果を連結することで、これを 10 分に短縮しました。ただし、これを行うための最適化された方法があるかどうかを知りたいと思っています。