2

質問を説明しましょう:

私は関数を知っているtablextabs、分割表を計算しますが、常に RAM に格納される data.frame を期待しています。これを大きなファイル (たとえば、20 GB、私が取り組まなければならない最大値) で実行しようとすると、非常に苦痛になります。

一方、SAS はファイルを 1 行ずつ読み取り、その過程で結果を更新するため、これを完全に実行できます。したがって、RAM には常に 1 行しかないため、はるかに許容されます。

私は、SAS で行う方法がわからなかったり、面倒すぎると思ったりする、より複雑なことをしなければならなかったときに、アドホックな Python プログラムで SAS と同じことをしたことがあります。Python の構文と統合された機能 (辞書、正規表現など) は、その弱点を補っています (主に速度ですが、20 GB を読み取る場合、いずれにしても速度はハード ドライブによって制限されます)。

私の質問: R でこれを行うためのパッケージがあるかどうか知りたいです。Python で行うようにファイルを 1 行ずつ読み取ることができることは知っていますが、単純な統計 (たとえば、分割表) を大きなファイルは非常に基本的なタスクであるため、統計パッケージでそれを行うには多かれ少なかれ「統合された」機能が必要だと思います。

この質問を「Cross Validated」で行うべきかどうか教えてください。統計よりもソフトウェアに関するものなので、疑問がありました。

4

1 に答える 1

2

これには、RAM の代わりにハードディスク ドライブを使用するパッケージffを使用できますが、R が RAM を使用する通常の方法よりも (大幅に) 遅くならないように実装されています。

これは、パッケージの説明からの場合:

ff パッケージは、ディスクに保存されるデータ構造を提供しますが、メイン メモリのセクション (ページサイズ) のみを透過的にマッピングすることにより、RAM にあるかのように (ほぼ) 動作します。

これで、RAM に 20GB のファイルをロードするという問題が解決すると思います。私はそのような目的でそれを自分で使用しましたが、うまく機能しました。

ここでも小さな例を参照してください。xtabsドキュメントの例から:

ベースR

#example from ?xtabs
d.ergo <- data.frame(Type = paste0("T", rep(1:4, 9*4)),
                     Subj = gl(9, 4, 36*4))
> print(xtabs(~ Type + Subj, data = d.ergo)) # 4 replicates each
Subj
Type 1 2 3 4 5 6 7 8 9
  T1 4 4 4 4 4 4 4 4 4
  T2 4 4 4 4 4 4 4 4 4
  T3 4 4 4 4 4 4 4 4 4
  T4 4 4 4 4 4 4 4 4 4

ffパッケージ

#convert to ff
d.ergoff <- as.ffdf(d.ergo)

> print(xtabs(~ Type + Subj, data = d.ergoff)) # 4 replicates each
    Subj
Type 1 2 3 4 5 6 7 8 9
  T1 4 4 4 4 4 4 4 4 4
  T2 4 4 4 4 4 4 4 4 4
  T3 4 4 4 4 4 4 4 4 4
  T4 4 4 4 4 4 4 4 4 4

メモリ操作の詳細については、こちらを確認してください。

于 2015-04-26T10:03:32.937 に答える