“大矩阵”和常规数值矩阵有什么区别?

Kat*_*tia 7 r matrix rstudio

创建相对较大的矩阵时,Rstudio在其环境窗口中将其标记为“大型矩阵”:

 x <- matrix(rnorm(10000 * 5000), ncol=5000)
 # Large matrix (50000000 elements, 381.5 Mb)
Run Code Online (Sandbox Code Playgroud)

预期的mode()函数为此对象返回“数字”:

mode(x)
## [1] "numeric"
Run Code Online (Sandbox Code Playgroud)

但是,如果我运行以下命令:

mode(x) <- "numeric"
Run Code Online (Sandbox Code Playgroud)

Rstudio将“大矩阵”更改为常规数值矩阵:

# x:  num [1:10000, 1:5000]
Run Code Online (Sandbox Code Playgroud)

那么这两个对象有什么区别?这种差异是否仅存在于Rstudio中,或者这两个对象在R中也不同?

sla*_*hut 1

在我的理解中,“大矩阵”和matrix矩阵对象是同一个。重要的是这些对象如何在 RStudio 的全局环境中 显示。

RStudio 还区分向量和大向量。考虑以下向量:

n <- 256
v1 <- rnorm(n*n-5)
Run Code Online (Sandbox Code Playgroud)

该向量被列为大向量。现在,让我们将其大小减小一:

v2 <- rnorm(n*n-6)
Run Code Online (Sandbox Code Playgroud)

突然,它变成了法向量。两个对象的结构是相同的(可以通过运行来验证str)。他们的类别和存储模式也是如此。那有什么不同呢?v2请注意,内存中的大小正好是 512 Kb。

lobstr::obj_size(v2)
>524,288 B # or exactly 512 kB
Run Code Online (Sandbox Code Playgroud)

的尺寸v1稍大一些:

lobstr::obj_size(v1)
>524,296 B # or 512.0078125 KB
Run Code Online (Sandbox Code Playgroud)

据我了解(如果我错了,请纠正我),为了方便起见,RStudio 以不同的方式显示大于 512 kB 的对象。