Erstellen (und Zugreifen) einer spärlichen Matrix mit NA-Standardeinträgen

Nach dem Lernen über dieMöglichkeiten zum Arbeiten mit spärlichen Matrizen in RIch möchte dieMatrix Paket, um eine dünne Matrix aus dem folgenden Datenrahmen zu erstellen und alle anderen Elemente zu habenNA.

     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

Ich weiß, dass ich eine dünne Matrix mit den folgenden Elementen erstellen kann, auf die wie gewohnt zugegriffen wird:

> library(Matrix)
> Y <- sparseMatrix(s,r,x=d)
> Y[1089,3772]
[1] 1
> Y[1,1]
[1] 0

aber wenn ich möchte, dass der Standardwert NA ist, habe ich Folgendes versucht:

  M <- Matrix(NA,max(s),max(r),sparse=TRUE)
  for (i in 1:nrow(X))
    M[s[i],r[i]] <- d[i]

und bekam diesen Fehler

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

Nicht nur das, ich finde, dass man viel länger braucht, um auf Elemente zuzugreifen.

> 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 

Wie soll ich diese Matrix erstellen? Warum ist es so viel langsamer, mit einer Matrix zu arbeiten?

Hier ist das Code-Snippet für die obigen Daten:

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")

Antworten auf die Frage(2)

Ihre Antwort auf die Frage