2012-08-01 2 views
1

나는 R.xlConnect R 사용은

R에

데이터로드 잘 loadWorkbook 또는 readWorksheetFromFile하지만 더 큰 데이터를 사용하여 (데이터 XLConnect (미라이 솔루션)를 사용하여 JVM 메모리에 문제가 실행 해요 프레임 약 3MB)은 내보내기 기능 (writeNamedRegion, writeWorksheetToFile 등) 중 하나를 사용하여 내보내기 중에 JVM에 기록되는 동안 멈추고 응답하지 않습니다.

options(java.parameters = "-Xmx1500m")을 사용하여 Java 매개 변수를 재설정 했으므로 Excel로 내보낼 수있는 데이터 프레임의 크기가 늘어 났지만 R은 여전히 ​​1MB 내외로 느려지고 3MB 정도는 작동하지 않습니다.

저는 8 비트 RAM이 장착 된 컴퓨터에서 32 비트 Office 소프트웨어 및 32 비트 Java가 설치된 64 비트 Windows 7 시스템에 있습니다. 3MB는 수출 시작 부분에있는 JVM의 ~ 750MB의 여유 메모리 (xlcMemoryReport으로 확인)와 비교할 때 매우 큰 것 같지 않습니다.

아이디어가 있으십니까?

답변

1

3MB의 참조 값이 주어지면 치수가 10 열 x 40k 행 (또는 이에 상응하는 수치 변수) 인 data.frame을 작성하려고합니다. 이러한 data.frame의 object.size는 대략 3.2MB).

xls (BIFF8) 또는 xlsx (OOXML) 파일을 작성하려는 경우 메모리 요구 사항이 매우 다를 수 있습니다. 이유는 xlsx 문서가 실제로 압축 된 XML 파일이고 Apache POI (기본 Java API 인 XLConnect)는이를 조작하기 위해 xmlbeans를 사용합니다. 이는 상당히 과격한 메모리 일 수 있습니다. 반면에 BIFF8은 바이너리 데이터 형식이며 메모리가 덜 필요합니다.

위에서 언급 한 차원의 data.frame을 max. xlsx 문서에 쓸 수 있어야합니다. 나를 위해 다음과 같은 가공 한 좋은 예 1,024m의 힙 크기 : 사용

options(java.parameters = "-Xmx1024m") # required BEFORE any JVM is initialized in R 
require(XLConnect) 
tmp = as.data.frame(matrix(rnorm(4e5), ncol = 10)) 
writeWorksheetToFile(tmp, file = "test.xlsx", sheet = "test") 

... R 2.15.1 32 비트 RStudio, XLConnect 0.2-0 및 32 비트 Windows에서 실행되는 JRE 1.6.0_25 (와 XP와 4GB의 RAM).

Apache POI 측의 메모리 사용에 대한 자세한 내용은 다음 토론을 참조하십시오. http://apache-poi.1045710.n5.nabble.com/HSSF-and-XSSF-memory-usage-some-numbers-td4312784.html