2016-06-17 2 views
1

내 R 세션에 여러 모양 파일을로드해야합니다. 현재, 각 셰이프 파일을 개별적으로로드하고 있습니다. 이 방법은 효과가 있지만 오랜 시간이 걸리며 사용 가능한 CPU의 15 % 만 사용합니다. 최근에, 나는를 ForEach 및 DoParallel를 사용하여 모양 파일을로드 시도 :이 방법은 작품과 매우 빠르고ForEach 및 DoParallel은 모든 RAM을 모두 사용합니까?

require(foreach) 
require(doParallel) 
require(rgdal) 
files <- c(
    "AHVENANMAA/AHVENANMAA", 
    "ETELA-KARJALA/ETELA-KARJALA", 
    "ETELA-POHJANMAA/ETELA-POHJANMAA_1", 
    "ETELA-POHJANMAA/ETELA-POHJANMAA_2", 
    "ETELA-SAVO/ETELA-SAVO_1" 
) 
registerDoParallel(cores = 8) 
listOfCurrentProvinces <- (
    foreach(
     x = files, 
     .packages = "rgdal", 
     .inorder = FALSE 
    ) %dopar% 
     readOGR(x, layer = "DR_LINKKI") 
) 

을 (내 CPU의 100 %를 사용한다). 그러나 너무 많은 메모리를 사용합니다. 특히 프로세스를 여러 번 반복 할 때 특히 그렇습니다. ForeEach와 DoParallel을 사용할 수있는 방법이 있습니까? 내 컴퓨터에는 8 개의 프로세서 (4 개의 물리 및 4 개의 논리)가 있으며 16GB의 RAM이 있습니다.

+0

[이 기사 (http://stackoverflow.com/questions/37750937/doparallel-package-foreach-does-not-work-for-big-iterations-in-r)를 읽으십시오. – 989

답변

0

저는 도움이 될만한 몇 가지 작업을 수행했습니다.

1) registerDoParallel 명령을 사용하여 한 번만 코어 수를 등록하십시오.

2) 반복 할 때마다 gc()을 사용하십시오.

이러한 변경 사항을 구현하기 전에 단 4 번의 (21 회) 반복 이후에 메모리가 폭발했습니다. 이제 6 번의 반복 작업을 완료했으며 50 %의 RAM 사용으로 편안하게 앉아 있습니다. 사용 가능한 RAM의 양은 약 15 분 동안 일정하게 유지됩니다.

관련 문제