2

R には非常に大きな (約 9100 万のゼロ以外のエントリ) sparseMatrix() があり、次のようになります。

> myMatrix 
  a b c  
a . 1 2
b 1 . .
c 2 . .

これを三角行列(上か下)に変換したいのですが、myMatrix = myMatrix * lower.tri(myMatrix) を実行しようとすると、lower.tri() に対して「問題が大きすぎます」というエラーが発生します。誰かが解決策を知っているかどうか疑問に思っています。助けてくれてありがとう!

4

2 に答える 2

6

マトリックス自体に取り組む代わりに、そのsummary:

library(Matrix)
myMatrix <- sparseMatrix(
    i = c(1,1,2,3),
    j = c(2,3,1,1),
    x = c(1,2,1,2))

myMatrix
# 3 x 3 sparse Matrix of class "dgCMatrix"
#           
# [1,] . 1 2
# [2,] 1 . .
# [3,] 2 . .

mat.summ   <- summary(myMatrix)
lower.summ <- subset(mat.summ, i >= j)

sparseMatrix(i = lower.summ$i,
             j = lower.summ$j,
             x = lower.summ$x,
             dims = dim(myMatrix))
# 3 x 3 sparse Matrix of class "dgCMatrix"
#           
# [1,] . . .
# [2,] 1 . .
# [3,] 2 . .
于 2012-09-12T00:05:33.293 に答える