3

64 ビット Windows で 64 ビット R を使用しています。しかし、次のステートメントを実行すると

fi <- ff(vmode="integer", length=2147483648)

Rは次のエラーメッセージを生成しました

length must be between 1 and .Machine$integer.max

これは 64 ビット R では意味がありません。この制限を回避する方法はありますか?

4

1 に答える 1

2

パッケージのソースを変更/再コンパイルすることで問題を解決しました。

ff の多くの機能の中で、ff オブジェクトを作成し、get/set 添字メソッドを呼び出すだけでよかったので、私の範囲は非常に狭く、これを一晩で行うことができましたが、ソースを非常によく整理した元の作成者にすべての功績が認められました。 . 実際、著者はこの問題に十分に備え、さまざまなタイプのインデックスとサイズの C マクロを作成しました。Cマクロを使ってやりたいことをやっただけです。

これが私がやったおおよそのことです。

  1. ff 関数の ff オブジェクトのサイズ (長さ) のすべてのエラー チェック整数を削除します。
  2. サイズとページサイズを C 関数に渡すときは、as.integer の代わりに as.double を使用しますnew
  3. ff.h では、次のマクロとそれに対応する ff.cpp の部分を再定義しました。

    #define FF_DECL_TYPE(NAME,TYPE) \
      FF_DECL_TYPE2(NAME,TYPE,int,int) \
      FF_DECL_TYPE2(NAME##_d,TYPE,double,double)
    
  4. r_ff.c の r_ff_new メソッドで、すべての *_new 関数を *_d_new に置き換え、len と pagesize に asInteger の代わりに asReal を使用します。

他にもやるべきことがあると確信していますが、最初のテストでは、上記の質問のステートメントを実行でき、R で配列の任意の要素を取得/設定できました。私の目的は、たとえば 30 GB を前処理して分析することです。 Rを離れずにデータキューブ。そして私はこれに近い。

于 2013-07-26T14:16:47.033 に答える