2017-04-04 3 views
0

이 게시물에 포함되지 않은 다양한 이유로 프레임 워크 data.table에서 작업하고 싶습니다. data.table에 표시기 매트릭스가 희박한 표현이 있습니까 (예 : Matrix 패키지)? 스파 스 매트릭스/객체의`data.table` 표현이 있습니까?

library(Matrix) 
library(data.table) 

set.seed(123409L) 

ints <- sample.int(2L, 1e6, replace=T, prob= c(0.9, 0.1)) - 1 

m <- Matrix(ints, ncol= 1000) 
dt <- data.table(matrix(ints, ncol= 1000)) 

pryr::object_size(m) # 1.22 MB 
pryr::object_size(dt) # 8.1 MB 

내가 성장 가상적으로 무제한이다 6e8 요소 가까이가 실제 사용 경우에서 가정한다.

이 질문에 대한 답변이 이미 도착되었습니다. 나는 그것을 복제물로 표시하게되어 기쁘다. 하지만 검색을 통해 중복을 찾지 못했습니다. @Frank 그의 주석에서 제안한 것처럼

+1

음'MDT = as.data.table (여기서 (행렬 (int 치의,을 NcoI = 1000) == 1 arr.ind = TRUE)) '또 다른 표현이다 , 다소 작다 (아마 나는 ou를 던지고 있기 때문에) t는'm'에서 보이는'@ x' 조각입니다). 그런 식으로 저장하면 dgCMatrix 객체를 사용하여 멋지게 고안된 모든 Matrix 함수에 액세스 할 수 없으므로 그럴 가치가 없을 수도 있습니다. – Frank

답변

0

, 당신은 삼중 형태로, 즉 개별 관찰, 그들의 인덱스와 함께 비 - 제로 요소를 저장하여 data.table에 효율적으로 희소 행렬을 나타낼 수

m2 <- as(m, "dgTMatrix") 
dt2 <- data.table([email protected]+1, [email protected]+1, [email protected]) 

pryr::object_size(dt2) # 1.62 MB 

data.tabledt 구성 될 수

dt2 <- melt(copy(dt)[,i:=.I], id.vars="i" 
    )[value>0][,j:=as.integer(variable)][,variable:=NULL]