我在64位Windows中使用64位R。但是,运行下面的语句时ff对象长度限制为64位Windows中的32位整数
fi <- ff(vmode="integer", length=2147483648)
R上产生一个错误信息说
length must be between 1 and .Machine$integer.max
这没有良好的意识为64位R.有没有办法避免这种限制?
我在64位Windows中使用64位R。但是,运行下面的语句时ff对象长度限制为64位Windows中的32位整数
fi <- ff(vmode="integer", length=2147483648)
R上产生一个错误信息说
length must be between 1 and .Machine$integer.max
这没有良好的意识为64位R.有没有办法避免这种限制?
我通过更改/重新编译软件包的源代码解决了这个问题。
在ff的许多功能中,我只需要创建ff对象并调用get/set下标方法,因此我的范围足够狭窄,足以让我在一夜之间完成此操作,但所有功劳都归功于组织原作者源很好。实际上,作者为这个问题做好了准备,并为不同类型的索引和大小制作了C宏。我只是用C宏来做我想做的事。
这里大概是我做的。
new
当删除FF对象的尺寸为(长度)的所有错误检查整数在FF功能在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)
,带* _d_new替换所有* _new功能和使用asReal代替asInteger为LEN和PAGESIZE
我相信还有更多的事情要做,但在我最初的测试,我可以在我的问题执行上面的语句,并可能获取/设置R.我数组的任何元素对象是预处理和分析,例如,30 GB的数据立方体不离开R.我就这么接近。
不错!如果将它包含在ff软件包中会很棒! – jwijffels
@jwijffels虽然我的改变还没有完成,但我愿意为有机会做出贡献。一旦我完成(测试/调试)这个改变,我会尝试联系作者。 –
看看你的(未指定的)64位版本R中的.Machine $ integer.max(它会一直是它的)。 R 3.0+确实允许更长的53位索引(数字尾数的长度),所以ff的作者可能还没有在代码中改变他们的测试。 –
http://google-opensource.blogspot.ca/2011/11/bringing-64-bit-data-to-r.html –
您使用的是哪个版本的R? > = R 3.0.0? –