如何在 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,您很可能 运行 内存不足。
对于任何后续问题,请提供可重现的示例和预期输出。
我正在开展一个项目,该项目要求我迭代文档术语矩阵,将所有非零值转换为 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,您很可能 运行 内存不足。
对于任何后续问题,请提供可重现的示例和预期输出。