支持比特矢量大小限制> R ^ 2 ^ 31 -1?

时间:2015-02-08 18:54:38

标签: r vector size bit

我最近对R中非常大的矢量/数组感兴趣。我从阅读文档中了解到,数组的大小限制为 2 31 - 1 。但是,使用CRAN包" bit",可以实例化长度 n 的布尔矢量,同时仅使用 n / 32 位。我想知道是否有可能通过某种方式实现位向量(或其他方式)来克服R的内部限制。对我来说,似乎有可能有一个限制为最大尺寸32倍的位向量(即 32(2 31 - 1)= 2 5 (2 31 - 1))。我尝试了各种方法,但没有成功。以下是R可以处理的一些示例:

library("bit")
a <- as.bit(rep(T, 10))
a
bit length=100 occupying only 4 integers
   1    2    3    4    5    6    7    8        93   94   95  96   97   98   99  100 
TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE   .. TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE

a <- as.bit(rep(T, 10^9))

以下是一些让R陷入恐慌的例子:

b <- as.bit(rep(T, 10^10))
Error in rep(T, 10^10) : invalid 'times' argument
In addition: Warning message:
In as.bit(rep(T, 10^10)) : NAs introduced by coercion

a <- c(as.bit(rep(T, 10^9)), as.bit(rep(T, 10^9)), as.bit(rep(T, 10^9)), as.bit(rep(T, 10^9)), as.bit(rep(T, 10^9)))
Error in if (length%%.BITS) n <- length%/%.BITS + 1L else n <-     length%/%.BITS : 
argument is not interpretable as logical
In addition: Warning messages:
1: In sum(nold) : integer overflow - use sum(as.numeric(.))
2: In c.bit(as.bit(rep(T, 10^9)), as.bit(rep(T, 10^9)), as.bit(rep(T,  :
integer overflow in 'cumsum'; use 'cumsum(as.numeric(.))'

编辑:经过一些研究,我发现对矢量大小的限制是由于对整数的限制。 R允许的最大整数是 2 31 - 1 ,由于整数用于索引向量,我们对它们施加相同的大小限制。这仍然没有真正回答我的问题。正如上面的第一个例子所示,我有一个带有100个布尔项的位向量,它只占用了4个整数值的内存。是否有某种嵌套指数的方法?例如,要查看1 st 位向量中的第83个元素,我们可以为位向量执行类似[2] [19](2 * 32 + 19 = 83)的操作吗?

0 个答案:

没有答案