Creación (y acceso) de una matriz dispersa con entradas predeterminadas de NA

Después de aprender sobre elOpciones para trabajar con matrices dispersas en R, Quiero usar elMatriz paquete para crear una matriz dispersa a partir del siguiente marco de datos y hacer que todos los demás elementos seanNA.

     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

Sé que puedo crear una matriz dispersa con lo siguiente, accediendo a los elementos como de costumbre:

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

pero si quiero tener el valor predeterminado para ser NA, intenté lo siguiente:

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

y obtuve este error

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

No solo eso, encuentro que uno tarda mucho más en acceder a los elementos.

> 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 

¿Cómo debería estar creando esta matriz? ¿Por qué una matriz es mucho más lenta para trabajar?

Aquí está el fragmento de código para los datos anteriores:

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

Respuestas a la pregunta(2)

Su respuesta a la pregunta