Как быстро применить к матрице термина документа в R - PullRequest
0 голосов
/ 14 ноября 2018

Я работаю над проектом, который требует от меня итерации матрицы условий документа, преобразования всех ненулевых значений в 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 голосов
/ 14 ноября 2018

Ваша функция преобразует разреженную матрицу в полную символьную матрицу. Если у вас большая матрица сроков документа, это приведет к длительному времени выполнения и хорошим шансам получения ошибки памяти. Замена значений в разреженной матрице может быть выполнена быстро, если вы используете способ построения матрицы. Значения разреженной матрицы хранятся в части матрицы 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, у вас есть хорошие шансы исчерпать память.

Для любых последующих вопросов, пожалуйста, включите воспроизводимый пример и ожидаемый результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...