Dopo aver appreso lo options for working with sparse matrices in R, voglio utilizzare il pacchetto Matrix per creare una matrice sparsa dal seguente frame di dati e avere tutti gli altri elementi da NA
.Creazione (e accesso) di una matrice sparsa con voci predefinite NA
s r d
1 1089 3772 1
2 1109 190 1
3 1109 2460 1
4 1109 3071 2
5 1109 3618 1
6 1109 38 7
so di poter creare una matrice sparsa con la seguente, l'accesso a elementi come al solito:
> library(Matrix)
> Y <- sparseMatrix(s,r,x=d)
> Y[1089,3772]
[1] 1
> Y[1,1]
[1] 0
ma se voglio avere il valore di default di essere NA, ho provato la seguente:
M <- Matrix(NA,max(s),max(r),sparse=TRUE)
for (i in 1:nrow(X))
M[s[i],r[i]] <- d[i]
e ottenuto questo errore
Error in checkSlotAssignment(object, name, value) :
assignment of an object of class "numeric" is not valid for slot "x" in an object of class "lgCMatrix"; is(value, "logical") is not TRUE
Non solo, trovo che ci vuole molto più tempo per accedere agli elementi.
> system.time(Y[3,3])
user system elapsed
0.000 0.000 0.003
> system.time(M[3,3])
user system elapsed
0.660 0.032 0.995
Come dovrei creare questa matrice? Perché una matrice è tanto più lenta con cui lavorare?
Ecco il frammento di codice per i dati di cui sopra:
X <- structure(list(s = c(1089, 1109, 1109, 1109, 1109, 1109), r = c(3772,
190, 2460, 3071, 3618, 38), d = c(1, 1, 1, 2, 1, 7)), .Names = c("s",
"r", "d"), row.names = c(NA, 6L), class = "data.frame")
Grazie! Non vedo l'ora di vedere più delle tue risposte su StackOverflow. Cercherò di recuperare alcune delle domande che ho avuto durante l'utilizzo di Matrix ... –
È spiacevole che tutte le celle diverse da zero vengano sempre memorizzate. Sarebbe bello poter specificare un valore predefinito diverso da zero per una sparseMatrix. – Quantum7
Sto pensando c'è un valore predefinito per sparseMatrix? – hs3180