2016-06-17 6 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%を使用しています)非常に高速です。しかし、それはあまりにも多くのメモリを使い果たします。私はForEachとDoParallelを使用して、このような大きなメモリヒットを起こさない方法はありますか?私のマシンは8つのプロセッサー(4つの物理メモリーと4つの論理メモリー)を持ち、16GBのRAMを備えています。

+0

[THIS]を読む(http://stackoverflow.com/questions/37750937/doparallel-package-foreach-does-not-work-for-big-iterations-in-r) – 989

答えて

0

私はいくつか役に立ったようなことをしました。

1)registerDoParallelコマンドを使用して、1回だけコア数を登録します。

2)各繰り返しの後にgc()を使用してください。

私はこれらの変更を実装する前に、わずか4回(21回)の反復の後にメモリが爆発しました。さて、私は6回の反復を完了し、50%のRAMで快適に座っています。利用可能なRAMの量は約15分間一定のままです。

関連する問題