Criando (e acessando) uma matriz esparsa com entradas padrão NA
Depois de aprender sobre oopções para trabalhar com matrizes esparsas em R, Eu quero usar oMatriz pacote para criar uma matriz esparsa a partir do seguinte quadro de dados e ter todos os outros elementos serNA
.
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
Eu sei que posso criar uma matriz esparsa com o seguinte, acessando elementos como de costume:
> library(Matrix)
> Y <- sparseMatrix(s,r,x=d)
> Y[1089,3772]
[1] 1
> Y[1,1]
[1] 0
mas se eu quiser que o valor padrão seja NA, tentei o seguinte:
M <- Matrix(NA,max(s),max(r),sparse=TRUE)
for (i in 1:nrow(X))
M[s[i],r[i]] <- d[i]
e recebi esse erro
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
Não só isso, acho que leva muito mais tempo para acessar 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
Como devo estar criando essa matriz? Por que uma matriz é muito mais lenta para se trabalhar?
Aqui está o trecho de código para os dados acima:
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")