如何在 R 中快速应用文档术语矩阵

How to quickly apply over Document Term Matrix in R

我正在开展一个项目,该项目要求我迭代文档术语矩阵,将所有非零值转换为 1 并将零值保持为零。我现在使用的功能需要永远运行,我想帮助优化代码。

我现在的代码是

convert_counts <- function(x) {
                    x <- ifelse(x > 0, 1, 0)
                    x <- factor(x, levels = c(0, 1), 
                    labels = c("No", "Yes"))}

data_exp <- apply(data_dtm, 2, convert_counts)

其中 data_dtm 是一个大型文档术语矩阵。

您的函数将稀疏矩阵转换为完整字符矩阵。如果你有一个很大的文档术语矩阵,这将导致很长的 运行ning 时间,并且很可能会出现内存错误。如果您利用矩阵的构建方式,可以快速替换稀疏矩阵中的值。稀疏矩阵值存储在矩阵的 v(值)部分。参见 ?slam::simple_triplet_matrix

在稀疏矩阵上使用任何 apply 系列,而不使用设计用于稀疏矩阵的函数会将其变成普通(密集)矩阵。相应地 运行 时间和内存问题。

要更改所有不同于 0 的值,只需使用以下命令:

data_dtm$v[data_dtm$v > 0] <- 1 inspect(data_dtm) # show first 10 columns and rows

这会将所有值替换为 1 并将数据保留为文档术语矩阵(又名漂亮且稀疏)。

根据您的后续数据分析,您确实应该使用稀疏矩阵函数。如果您想将大型文档术语矩阵转换为 data.frame 或 data.table,您很可能 运行 内存不足。

对于任何后续问题,请提供可重现的示例和预期输出。