我最近对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)的操作吗?