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