2014-02-28 3 views
6

내가 변환 tm 패키지의 TermDocumentMatrix()로 만든 다음 간단한 삼중 매트릭스를 시도하고있다 "를 simple_triplet_matrix을"Transform 클래스의클래스 클래스에서 "매트릭스"

A term-document matrix (317443 terms, 86960 documents) 

Non-/sparse entries: 18472230/27586371050 
Sparsity   : 100% 
Maximal term length: 653 
Weighting   : term frequency (tf) 

[1] "TermDocumentMatrix" "simple_triplet_matrix" 

조밀 한 모체에.

dense <- as.matrix(tdm) 

그러나

오류

Error in vector(typeof(x$v), nr * nc) : vector size cannot be NA 
In addition: Warning message: 
In nr * nc : NAs produced by integer overflow 

정말 오류 및 경고 메시지를 이해할 수를 생성합니다. 작은 데이터 세트에서 오류를 복제하려고하면 동일한 문제가 발생하지 않습니다.

library(tm) 
data("crude") 
tdm <- TermDocumentMatrix(crude) 
as.matrix(tdm) 

this answer에서 slam 패키지를 통해 유사한 문제가 해결되었음을 알았습니다 (비록 질문이 합계 연산에 관한 것이었지만 조밀 한 행렬로의 변환이 아니 었음). slam 설명서를 열람했지만 클래스 simple_triplet_matrix의 객체를 matrix의 객체로 변환하는 특정 함수를 찾을 수 없습니다.

와 같이 문서의 큰 숫자를 가지고 ..이 오류 재현 한 이후 일반 정수 제한의 한계에 도달 주석 때문에 오류가 발생하는
+2

행 수 xs 열 수 'nr * nc'는 사용 가능한 저장 영역에 비해 너무 큽니다. –

답변

2

:

as.integer(.Machine$integer.max+1) 
[1] NA 
Warning message: 
NAs introduced by coercion 

기능 vector 매개 변수로 정수를 취 두 번째 매개 변수가 NA이므로 실패합니다.

as.matrix.simple_triplet_matrix을 다시 정의하려면 vector을 호출하지 않는 것이 좋습니다. 예 :

하지만 희소 행렬 (100 %)과 같은 행렬을 강요하는 것은 좋은 생각이 아닙니다.

편집

하나의 아이디어 Matrix 패키지 saparseMatrix을 사용하는 것입니다. 다음은 각 강요에 의해 생성 된 객체를 비교하는 예제입니다. 너는 sparseMatrix을 사용하여 빌려주는 10의 인자를 얻는다. (나는 너의 매우 희박한 행렬에 관해서 더 많은 것을 얻는다.) 또한, 덧셈과 곱셈은 희소 매트릭스에 의해 지원됩니다.

require(tm) 
data("crude") 
dtm <- TermDocumentMatrix(crude, 
          control = list(weighting = weightTfIdf, 
             stopwords = TRUE)) 
library(Matrix) 
Dense <- sparseMatrix(dtm$i,dtm$j,x=dtm$v) 
dense <- as.matrix(dtm) 
## check sizes 
floor(as.numeric(object.size(dense)/object.size(Dense))) 
## addistion and multiplication are supported 
Dense+Dense 
Dense*Dense 
+0

음, 조밀 한 행렬이 필요합니다 (특히 곱셈) ... 삼중 항 행렬에서 직접 연산하는 것이 더 좋을 것이라고 제안 하시겠습니까? – CptNemo

+0

예! 이것은 긴 형식의 dtm [i, j, value]에있는 목록에 불과합니다. 이 형식으로 행렬 연산을 할 수 있는지 확인하십시오. – agstudy

+0

나는 내 tdm에서이 기능을 시도했다 :'오류 : 크기가 205.7 GB 인 벡터를 할당 할 수 없다' – CptNemo

0

방금 ​​비슷한 문제가있었습니다. 내 문제가 동일한 지 확실하지 않지만 스파 스 매트릭스를 고밀도 매트릭스와 결합 할 때 비슷한 오류 메시지가 나타날 수 있습니다. NAs produced by integer overflow. as.single을 사용하여 조밀 한 행렬을 단 정밀도로 변환하여 문제를 해결할 수있었습니다. "overflowing integers"는 sparseMatrix 패키지의 연산으로 인해 남은 자릿수를 남기는 배정도 값을 어떻게 든 자릅니다.

관련 문제