我正在做一个项目,要求我遍历文档术语矩阵,将所有非零值都转换为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
是大型文档术语矩阵。
答案 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,则很有可能耗尽内存。
对于任何后续问题,请提供可复制的示例和预期的输出。