2012-08-07 2 views
3

을 초과 나는 다음과 같은 R 코드가 내 testfile.data의R은 - 빅 데이터 - 벡터 벡터 길이 제한

data <- read.csv('testfile.data', header = T) 
mat = as.matrix(data) 

좀 더 통계 :

> ncol(data) 
[1] 75713 
> nrow(data) 
[1] 44771 

이 큰 데이터 세트이기 때문에를, 그래서 Amazon EC2를 64GB RAM 공간과 함께 사용하고 있습니다. 그래서 희망적인 기억은 문제가되지 않습니다. 데이터를로드 할 수 있습니다 (1 행 작동). 문제가 무엇인지

resulting vector exceeds vector length limit in 'AnswerType' 

단서 : 그러나 as.matrix 변환 (2 라인 오류는) 다음과 같은 오류가 발생합니다?

답변

6

행렬의 최대 벡터 길이가 2^31-1보다 더 많은 요소가 있습니다. 행렬은 dim 속성을 가진 벡터 일 뿐이므로 문제가됩니다. read.csv은 벡터 목록 인 data.frame을 반환하기 때문에 작동합니다.

R> 75713*44771 > 2^31-1 
[1] TRUE 

자세한 내용은 ?"Memory-limits"을 참조하십시오.

+0

그냥 저를 때려주십시오. R에이 정보를 찾을 수있는 링크를 추가했습니다. – mnel

+0

@mnel : 편집 해 주셔서 감사합니다. 나는 또한'read.csv'가 작동하지만'as.matrix'는 왜 그런지에 대한 세부 사항을 추가했습니다. –

+0

@JoshuaUlrich는 그렇게함으로써 R이 내가 가지고있는 데이터 세트만큼 큰 데이터 세트를 처리 할 방법이 없다는 것을 의미합니까? – tan

12

R의 개발 버전은 2^31-1보다 큰 벡터를 지원합니다. 이것은 예를 들어,

> R.version.string 
[1] "R Under development (unstable) (2012-08-07 r60193)" 

대형 오브젝트 (내 예를 들어 내 16G의 62.5 %,) 메모리를 많이 소비하고 아무것도 할로 이것은

> m = matrix(0L, .Machine$integer.max/4, 5) 
> length(m) 
[1] 2684354555 

더 또는 덜 투명 유용함은 그 기억의 몇 배를 필요로합니다. 또한, 큰 데이터에 대한 간단한 조작조차 상당한 시간이 걸릴 수 있습니다. 그리고 긴 벡터에 많은 작업은 아직 종종 큰 파일을 반복하여 작은 청크에서 데이터를 처리하는 의미가 그래서

> sum(m) 
Error: long vectors not supported yet: 
    /home/mtmorgan/src/R-devel/src/include/Rinlinedfuns.h:100 

를 지원하지 않습니다. 이것은 R의 루틴에 대한 완전한 액세스를 제공하며 병렬 패키지를 통한 병렬 평가를 허용합니다. 또 다른 전략은 데이터를 다운 샘플링하는 것인데 통계적으로 관객에게 너무 협박해서는 안됩니다.

+0

+1 Martin! –

+0

@Martin 병렬 평가는 모든 R 함수에서 가능하지 않을 수도 있습니다. 예 : glmnet. 적어도 glmnet에 대해 병렬 구현이 가능한지 알고 있지 않으며 현재 데이터 분석에 필요합니다. – tan