2016-03-09 34 views
0

问题与包`IRanges`整数溢出在`R`

我使用的包[IRanges][1]和上午在需要对于由约10倍立交桥2^31非常长的序列准确的代码。

从以下,似乎IRanges使用int32

##### INSTALLATION FROM SRC CODE ###### 
## try http:// if https:// URLs are not supported 
source("https://bioconductor.org/biocLite.R") 
biocLite("IRanges") 

##### CALL PACKAGE ##### 
require(IRanges) 


IRanges(start=1,end=2^31-1) # Works fine 

IRanges(start=1,end=2^31) # Fail 
Error in .Call2("solve_user_SEW0", start, end, width, PACKAGE = "IRanges") : 
    solving row 1: range cannot be determined from the supplied arguments (too many NAs) 
In addition: Warning message: 
In .normargSEW0(end, "end") : NAs introduced by coercion to integer range 

由于这种包装通常用于DNA序列,这将是能够能够处理与大于值非常有用2^32(≈10^9),因为许多生物的基因组大小比它长。

问题

  • 我说得对不对以为这是一个整数溢出问题?
  • 你遇到同样的问题吗?
  • 有没有办法解决这个问题?
    • 是否有可能(易)到找到源代码,只是修改对象类型
    • 你认为存在这个包的另一个版本?

我发现的唯一的解决办法是接受降低我的水平精度和除以100的宽度都...但我不是很高兴与我的降低精度。

ř版本

R version 3.2.3 (2015-12-10) -- "Wooden Christmas-Tree" 
Copyright (C) 2015 The R Foundation for Statistical Computing 
Platform: x86_64-apple-darwin13.4.0 (64-bit) 

回答

1

您正在达到一个整数的大小可以与R.来表示的限制

> .Machine$integer.max 
#[1] 2147483647 
> log2(.Machine$integer.max) 
#[1] 31 

有喜欢bit64gmp那是特殊的库用于处理例如64位有符号整数。但是,不确定这些包所代表的整数是否与其他库兼容。

+0

调用软件包'bit64'似乎没有达到IRanges'软件包中更高的数字。那么我想我必须重写'IRanges'的一些功能。 THANKs –

+0

@ Remi.b你能找到解决方法,或者你最终不得不编辑IRanges源代码? – knowah

+0

我做了我自己的一系列IRanges函数,我只是用data.frame而不是创建一个新类。这实际上很简单(包括3小时调试)。我没有把这个代码放在github上,因为我没有使用github,但我应该和我很快。 –