我正在做一个项目,该项目要求我遍历文档术语矩阵,将所有非零值转换为 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
大型文档术语矩阵在哪里。
您拥有的函数将稀疏矩阵转换为完整字符矩阵。如果你有一个很大的文档术语矩阵,这将导致很长的运行时间和出现内存错误的好机会。如果您利用矩阵的构建方式,可以快速替换稀疏矩阵中的值。稀疏矩阵的值存储在矩阵的v
(values) 部分。见?slam::simple_triplet_matrix
。
在稀疏矩阵上使用任何 apply 系列,而不使用旨在处理稀疏矩阵的函数,将把它变成一个普通(密集)矩阵。相应的长时间运行和内存问题。
要在您的情况下更改所有不同于 0 的值,只需使用以下命令:
data_dtm$v[data_dtm$v > 0] <- 1
inspect(data_dtm) # show first 10 columns and rows
这会将所有值替换为 1,并将数据保留为文档术语矩阵(又名 nice 和 sparse)。
根据您的后续数据分析,您确实应该使用稀疏矩阵函数。如果您想将大型文档术语矩阵转换为 data.frame 或 data.table,您很有可能会耗尽内存。
对于任何后续问题,请包括可重现的示例和预期的输出。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句