我在 R 中有一个因子矩阵,并希望将其转换为每个因子的所有可能级别的虚拟变量 0-1 矩阵。
然而,这个“虚拟”矩阵非常大(91690x16593)并且非常稀疏。我需要将它存储在一个稀疏矩阵中,否则它不适合我的 12GB 内存。
目前,我正在使用以下代码,它工作得很好,需要几秒钟:
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 包中是否有等价物?我在文档中搜索但没有找到。