我在具有400GB RAM的64位Ubuntu环境中运行64位R 3.1,在处理大型矩阵时遇到了一个奇怪的限制.
我有一个名为A的数字矩阵,即4000行乘950,000列.当我尝试访问其中的任何元素时,我收到以下错误:
Error: long vectors not supported yet: subset.c:733
Run Code Online (Sandbox Code Playgroud)
虽然我的矩阵是通过via读取的scan,但您可以使用以下代码进行复制
test <- matrix(1,4000,900000) #no error
test[1,1] #error
Run Code Online (Sandbox Code Playgroud)
我的谷歌搜索显示这是R 3.0之前的常见错误消息,其中大小为2 ^ 31-1的向量是限制.但是,鉴于我的环境,情况并非如此.
我不应该为这种矩阵使用原生矩阵类型吗?
Sim*_*lon 19
矩阵只是一个具有维度属性的原子向量,允许R将其作为矩阵访问.矩阵是长度的向量,4000*9000000它是3.6e+10元素(最大整数值是大约2.147e+9).子集长矢量被支持原子的载体(即访问超出元件2.147e+9极限).只需将矩阵视为长向量即可.
如果我们记得默认情况下R按列填充矩阵然后如果我们想要检索说test[ 2701 , 850000 ]我们可以通过以下方式访问它:
i <- ( 2701 - 1 ) * 850000 + 2701
test[i]
#[1] 1
Run Code Online (Sandbox Code Playgroud)
请注意,这实际上是长向量子集,因为:
2701L * 850000L
#[1] NA
#Warning message:
#In 2701L * 850000L : NAs produced by integer overflow
Run Code Online (Sandbox Code Playgroud)