在瞭解了options for working with sparse matrices in R之後,我想使用Matrix包從以下數據框創建稀疏矩陣,並讓所有其他元素爲NA
。使用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
我知道我可以創建具有以下稀疏矩陣,訪問元素和往常一樣:
> library(Matrix)
> Y <- sparseMatrix(s,r,x=d)
> Y[1089,3772]
[1] 1
> Y[1,1]
[1] 0
,但如果我想有默認值是NA,我試過如下:
M <- Matrix(NA,max(s),max(r),sparse=TRUE)
for (i in 1:nrow(X))
M[s[i],r[i]] <- d[i]
,並得到這個錯誤
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
不僅如此,我發現需要更長時間才能訪問元素。
> 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
我應該如何創建這個矩陣?爲什麼一個矩陣慢得不能使用?
下面是上述數據的代碼片段:
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")
謝謝!我期待在StackOverflow上看到更多的答案。我會盡量鼓勵我在使用Matrix時遇到的一些問題...... – 2009-08-24 17:10:42
不幸的是,所有非零單元總是被存儲。能夠爲sparseMatrix指定非零的默認值將會很好。 – Quantum7 2010-05-06 00:19:05
我在想sparseMatrix是否有默認值? – hs3180 2014-04-26 08:04:13