2011-08-07 10 views
6

bigmemory 패키지의 scan() 및 read.big.matrix() 사용을 결합하여 200MB의 .csv 결과가 정수, 문자 및 숫자 열이있는 데이터 프레임이되도록 혼합 유형 열이있는 파일?bigmemory 패키지를 사용하여 혼합 유형 열을 사용하여 큰 csv 파일을로드하는 방법

+1

큰 메모리 패키지 여야합니까?나는 ff가 이런 종류의 물건에 훨씬 더 유용하다는 것을 발견했다. – mdsumner

+0

@mdsumner가 올바른 길 위에있다. 심지어 파일 지원이 필요합니까? 200MB의 경우,이 파일을 읽고, 작업 한 다음 1 개 이상의 BM 파일 (또는 원하는 경우 'ff')로 저장하십시오. – Iterator

답변

3

도움말 파일에 따르면, 아니요.

파일에는 원자 유형 하나만 포함해야합니다 (예 : 모든 정수). 사용자는 파일에 행 및/또는 열 이름이 있는지 여부를 알고 있어야하며 다양한 옵션 조합이 원하는 동작을 얻는 데 도움이됩니다.

나는이 패키지/기능에 익숙하지 않은 해요,하지만 R에, 매트릭스 (예를 들어 data.frames 달리) 하나의 원자 유형을 가질 수 있습니다.

+0

두 센트 주셔서 감사합니다. 이 블로그에서 http://joshpaulson.wordpress.com/2010/12/20/michael-kane-on-bigmemory/ 누군가는 오직 하나의 원자 적 유형 (큰 것으로 상속 된 특성)을 갖는 행렬의 한계에 대한 해결책을 제안했습니다. 행렬)은 scan()을 사용하는 것입니다. 나는 누군가가 bigmemory 패키지의 read.big.matrix와 그들의 경험을 공유 할 수 있기를 바랬다. 특히 혼합 유형 컬럼을 읽는 것과 scan()을 사용했는지에 관해서 말이다. – Lourdes

+0

어쩌면 당신은 처리 단계에서 그것을 할 수 있지만, 나는 틀린 것으로 입증되고 싶습니다 (sensu @Iterator). –

9

이에 대한 ff 패키지를 사용해보십시오.

library(ff) 
help(read.table.ffdf) 

기능 'read.table.ffdf는'ffdf ' 목적, 매우 추천 (및 이용)'read.table '로 구분 플랫 파일을 판독한다. 또한 은 'read.csv'와 같은 편의 용 래퍼와 함께 작동하며 R의 일반적인 래퍼에 대해 자체의 편리한 래퍼 (예 : 'read.csv.ffdf')를 제공합니다.

200Mb의 경우이 작업은 간단해야합니다.

(훨씬 더 큰 파일의 경우 컴퓨터 및 OS에 따라 일부 구성 옵션을 조사해야 할 수 있습니다).

+0

감사합니다. 나는 ff 패키지를 사용해 보았고, 객체에 저장 한 거의 300 MB의 데이터 세트를 읽을 수 있었고 나중에 객체를 as.data.frame으로 데이터 프레임에 넣을 수있었습니다. 그러나 이것은 분석을 위해 거의 남지 않았던 많은 양의 메모리를 먹었습니다. 그래도 좋은 출발이었고 도움이되는 제안이었습니다. – Lourdes

+0

전체 지점은 전체 지점을로드하지 않고 ff 패키지의 메모리 매핑 기능을 사용합니다. ff 데이터 구조에서 부분을 추출하는 도구가 있습니다. – mdsumner

6

아,이 인생에는 불가능한 것들이 있으며, 오해되어 불쾌한 상황을 초래하는 것들이 있습니다. @Roman은 맞습니다. 매트릭스는 원자 유형 하나 여야합니다. 데이터 프레임이 아닙니다.

매트릭스가 하나의 유형이어야하므로 bigmemory을 스누커로 시도하여 여러 유형을 처리하는 것은 그 자체로 좋지 않습니다. 할 수 있을까요? 나는 거기에 가지 않을 것이다. 왜? 다른 모든 것들은 그것이 데이터 프레임이 아니라 매트릭스를 얻고 있다고 가정 할 것이기 때문입니다. 그것은 더 많은 의문과 더 많은 슬픔으로 이어질 것입니다.

이제 각 열의 유형을 식별하고 각각 특정 유형의 항목을 포함하는 고유 한 빅 메모리 파일 집합을 생성 할 수 있습니다. 예 : charBM = 문자 빅 매트릭스, intBM = 정수 빅 매트릭스 등. 그런 다음이 모든 것을 통해 데이터 프레임을 생성하는 래퍼를 개발할 수 있습니다. 아직도 나는 이것을 권장하지 않는다 : 큰 항목의 그리핀을 생산하려고 시도하기보다는 다른 항목을 그대로 취급하거나 가능한 한 동질성을 강요한다.

@mdsumner는 ff을 제안하는 데있어 정확합니다. 또 다른 저장 옵션은 HDF5이며, R에서 ncdf4을 통해 액세스 할 수 있습니다. 불행히도 이러한 다른 패키지는 bigmemory만큼 유쾌하지 않습니다.

+0

Thanks Iterator. 당신 말이 맞아요. 다른 패키지들은 빅 메모리처럼 즐겁지가 않아요. – Lourdes

0

가장 좋은 해결책은 파일을 한 줄씩 읽고 파싱하는 것입니다. 이렇게하면 읽기 프로세스가 거의 선형으로 메모리를 차지합니다.

+0

StackOverflow에 오신 것을 환영합니다! 그러나 이것은 bigmemory 패키지를 특별히 목표로 한 질문에 대답하지 않습니다. –