我有一个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软件包,并最终使用write.matrix.csr()
将此矩阵保存为libsvm格式,因此我需要先将我的稀疏矩阵转换为SparseM格式。
我尝试了以下操作:
library(SparseM)
X2 <- as.matrix.csr(X)
但它很快占用了我的 RAM ,最终导致 R 崩溃。我怀疑在内部,as.matrix.csr
首先将稀疏矩阵转换为密集矩阵,而后者不适合我的计算机内存。
我的另一个选择是直接用 SparseM 格式创建稀疏矩阵。
我尝试了 as.matrix.csr(X_factors)
但它不接受因子数据框。
在 SparseM 包中是否有与 sparse.model.matrix(~.-1, data = X_factors)
等价的函数?我查看了文档但没有找到。