21

MS-SQL サーバーからテーブルをダウンロードすることになっています。

行数が 600 万を超えています。サーバーは一度にデータ全体を返すことはできません。

そこで、一度に 10,000 行をダウンロードするコードを書きました。そして、ループ内で行をバインドします。

getData()関数が一度に 10000 行を含むデータ フレームを返すとします。(疑似コード)

for(i in 1:600)
{
    tempValue <- getData()
    wannagetValue <- rbind(wannagetValue,tempValue)
    print(i)
}

問題は、時間の経過とともに速度が低下することです。

そのようにrbindを使用するのは良い考えではないと思います。

どんなアドバイスもとても役に立ちます。前もって感謝します。

4

3 に答える 3

5

上で指摘したように、R はデフォルトですべてのオブジェクトを RAM に格納するため、その量のデータではいくつかの問題が発生します。

追加したい 2 つの点: 1) 通常、data.table を使用したくない場合はrbind.fill、Hadley のplyrパッケージの関数を使用できますが、これも非常に高速です。上記のように「for」ループで各行を個別に追加しないでください。rbind1行を追加するたびにRにデータフレームオブジェクトのコピーを強制的に作成させますが、これは遅いです。

2) R で RAM よりも大きなデータを処理するには、http://cran.r-project.org/web/views/HighPerformanceComputing.html の「Large memory and out-of-memory data」セクションを参照しください。多分パッケージはあなたが必要とするものです。bigmemory

于 2013-10-31T05:53:16.937 に答える