如何快速应用R

时间:2018-11-14 15:53:17

标签: r text-mining

我正在做一个项目,要求我遍历文档术语矩阵,将所有非零值都转换为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是大型文档术语矩阵。

1 个答案:

答案 0 :(得分:0)

您拥有的函数将稀疏矩阵转换为完整的字符矩阵。如果文档项矩阵很大,这将导致运行时间长,并且很容易出现内存错误。如果您利用矩阵的构建方式,则可以快速完成稀疏矩阵中的值替换。稀疏矩阵值存储在矩阵的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,则很有可能耗尽内存。

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