преобразовать простую триплетную матрицу (хлопок) в разреженную матрицу (матрицу) в R

Есть ли встроенная функция в пакете slam или пакете Matrix для преобразования разреженной матрицы в простой форме триплетной матрицы (из пакета slam) в разреженную матрицу в форме dgTMatrix/dgCMatrix (из пакета Matrix)?

И есть ли встроенный способ доступа к ненулевым элементам из простой матрицы триплетов?

я работаю в р


person GorillaInR    schedule 15.11.2013    source источник
comment
Вряд ли вы получите большую помощь в таком вопросе. Воспроизводимый пример вашей ситуации очень поможет, и, по крайней мере, некоторый код, показывающий, что вы пробовали до сих пор.   -  person Chargaff    schedule 15.11.2013
comment
Этот вопрос не нуждается в воспроизводимом примере. Простая триплетная матрица является простой триплетной матрицей, независимо от того, какие данные она содержит. Я задаю этот вопрос, чтобы выяснить, есть ли в любом пакете встроенная функция для поддержки преобразования между ними. Я не прошу специального кода, который я мог бы сделать сам.   -  person GorillaInR    schedule 15.11.2013
comment
Нет, кажется, нет встроенной функции для преобразования между разреженными матрицами, сгенерированными пакетами Matrix и slam.   -  person Chargaff    schedule 15.11.2013


Ответы (2)


На самом деле есть встроенный способ:

simple_triplet_matrix_sparse <-  sparseMatrix(i=simple_triplet_matrix_sparse$i, j=simple_triplet_matrix_sparse$j, x=simple_triplet_matrix_sparse$v,
           dims=c(simple_triplet_matrix_sparse$nrow, simple_triplet_matrix_sparse$ncol))

По моему собственному опыту, этот трюк сэкономил мне кучу времени и страданий, а также сбой компьютера при крупномасштабном анализе текста с использованием пакета tm. Этот вопрос на самом деле не нуждается в воспроизводимом примере. Простая триплетная матрица является простой триплетной матрицей, независимо от того, какие данные она содержит. Этот вопрос просто спрашивает, есть ли встроенная функция в любом пакете для поддержки преобразования между ними.

person GorillaInR    schedule 16.11.2013
comment
Я не согласен. С воспроизводимым примером вопрос «да/нет», подобный вашему, даст более информативные ответы, и они будут содержать практические примеры. Ваши шансы увидеть более одного ответа также значительно увеличатся. - person Chargaff; 18.11.2013

небольшая модификация. sparseMatrix принимает целые числа в качестве входных данных, тогда как slam принимает i, j в качестве множителей, а v может быть любым

as.sparseMatrix <- function(simple_triplet_matrix_sparse) {

  sparseMatrix(
    i = simple_triplet_matrix_sparse$i,
    j = simple_triplet_matrix_sparse$j,
    x = simple_triplet_matrix_sparse$v,
    dims = c(
      simple_triplet_matrix_sparse$nrow, 
      simple_triplet_matrix_sparse$ncol
      ),
    dimnames = dimnames(simple_triplet_matrix_sparse)
  )

}
person user3465707    schedule 26.03.2014
comment
Пакет slam:: не хранит индексы как факторы (по состоянию на 2020 год), поэтому вызовы as.numeric() не нужны. В противном случае, это прекрасная функция. - person Gabriel J. Odom; 26.02.2020