Rに因子の行列があり、それを各因子の可能なすべてのレベルのダミー変数0-1の行列に変換したいと考えています。
ただし、この「ダミー」マトリックスは非常に大きく (91690x16593)、非常にまばらです。疎行列に格納する必要があります。そうしないと、12GB の RAM に収まりません。
現在、次のコードを使用していますが、非常にうまく機能し、数秒かかります。
library(Matrix)
X_factors <- data.frame(lapply(my_matrix, as.factor))
#encode factor data in a sparse matrix
X <- sparse.model.matrix(~.-1, data = X_factors)
ただし、R で e1071 パッケージを使用し、最終的にこの行列を libsvm 形式で保存したいwrite.matrix.csr()
ので、最初に疎行列をSparseM形式に変換する必要があります。
私はやろうとしました:
library(SparseM)
X2 <- as.matrix.csr(X)
しかし、すぐに RAM がいっぱいになり、最終的に R がクラッシュします。内部的には、as.matrix.csr
最初に疎行列をコンピューターのメモリに収まらない密行列に変換すると思われます。
私の他の代替手段は、SparseM 形式で直接疎行列を作成することです。
試してみas.matrix.csr(X_factors)
ましたが、要素のデータフレームを受け入れません。
sparse.model.matrix(~.-1, data = X_factors)
SparseM パッケージに相当するものはありますか? ドキュメントを検索しましたが、見つかりませんでした。