ff对象长度在64位Windows中限制为32位整数

时间:2013-07-25 20:58:14

标签: r

我在64位Windows中使用64位R。但是在运行以下语句时

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

R产生了一条错误信息

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

这对64位R没有任何意义。有没有办法避免这种限制?

1 个答案:

答案 0 :(得分:2)

我通过更改/重新编译包的源来解决了这个问题。

在ff的很多功能中,我只需要创建ff对象并调用get / set下标方法,所以我的范围足够窄,我可以在一个晚上完成这个,但所有的功劳都归功于组织了来源非常好。事实上,作者为这个问题做好了充分准备,并为不同类型的索引和大小制作了C宏。我只是用C宏来做我想做的事。

这大致是我所做的。

  1. 删除ff函数
  2. 中ff对象大小(长度)的所有错误检查整数
  3. 将size和pagesize传递给C函数new时,请使用as.double而不是as.integer。
  4. 在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)
    
  5. 在r_ff.c的r_ff_new方法中,将所有* _new函数替换为* _d_new并使用asReal而不是asInteger for len和pagesize

  6. 我确信还有更多的事情要做但是在我的初始测试中,我可以在上面的问题中执行语句,并且可以在R中获取/设置数组的任何元素。我的对象是预处理和分析,例如,30 GB数据立方体,没有离开R.我就是这么接近。