J'ai une matrice rare ( Y a-t-il un moyen de contraindre la matrice clairsemée à un dgcmatrix code>) à la suite de l'ajustement d'un
GLMNET code>. Je veux écrire ce résultat à un
.csv code> mais je ne peux pas utiliser
write.table () code> la matrice car il ne peut pas contraindre à un
data.frame code>. p>
data.frame code> ou une matrice régulière? Ou existe-t-il un moyen de l'écrire dans un fichier tout en conservant les noms de coefficients qui sont probablement des noms de ligne? P>
4 Réponses :
Vous pouvez écrire l'objet résultant en utilisant as.matrix () code> sera converti en la représentation dense complète:
write.csv code> ou
write.table code>. p> p>
J'ai essayé matrix () et ça n'a pas fonctionné, je ne pensais pas essayer comme.matrix (). Merci pour l'aide.
qui sera dangereux de transformer la matrice clairsemée en une normale, si la taille de matrice clause est trop grande. Dans mon cas (tâche de classification de texte), j'ai eu une matrice de taille 22490 de 120 000. Si vous essayez d'obtenir la matrice dense, cela sera supérieur à 20 Go, je pense. Alors r va tomber en panne! P>
Donc, ma suggestion, vous pouvez simplement stocker la matrice rare d'une manière efficace et conviviale, telle que
> library(Matrix) > dn <- list(LETTERS[1:3], letters[1:5]) > m <- sparseMatrix(i = c(3,1,3,2,2,1), p= c(0:2, 4,4,6), x = 1:6, dimnames = dn) > m 3 x 5 sparse Matrix of class "dgCMatrix" a b c d e A . 2 . . 6 B . . 4 . 5 C 1 . 3 . . > sparse2triples(m) row col x 1 C a 1 2 A b 2 3 B c 4 4 C c 3 5 A e 6 6 B e 5
Veuillez ajouter une explication car ce sera plus facile à comprendre
Cela a fonctionné pour moi (qui a été pris de votre réponse) SM = Résumé (MAT0) D1 = NROW (MAT0) D2 = NROW (MAT0) A <-AS.Matrix (Data.Frame (rangée = D1, col = D2, X = Sm))
La conversion directement en une matrice dense est susceptible de perdre beaucoup de mémoire. La matrice de package R permet de convertir la matrice clairsemée en une trame de données de format de triplet de coordonnées de coordonnées en mémoire à l'aide de la fonction En outre, voici une illustration du Documentation de package Matrix : p> Résumé () code>, qui pourrait ensuite être écrite facilement sur CSV. Ceci est probablement plus simple et plus facile que l'approche du marché matricielle. Voir la réponse à cette question connexe: Matrice raffinée à un Cadre de données dans R
## very simple export - in triplet format - to text file:
data(CAex)
s.CA <- summary(CAex)
s.CA # shows (i, j, x) [columns of a data frame]
message("writing to ", outf <- tempfile())
write.table(s.CA, file = outf, row.names=FALSE)
## and read it back -- showing off sparseMatrix():
str(dd <- read.table(outf, header=TRUE))
## has columns (i, j, x) -> we can use via do.call() as arguments to sparseMatrix():
mm <- do.call(sparseMatrix, dd)
stopifnot(all.equal(mm, CAex, tolerance=1e-15))