Qual é a diferença entre “Matriz Grande” e matriz numérica regular?

8

Quando uma matriz relativamente grande é criada, o Rstudio a marca como uma Matriz Grande em sua janela de ambiente:

 x <- matrix(rnorm(10000 * 5000), ncol=5000)
 # Large matrix (50000000 elements, 381.5 Mb)

A função mode () conforme o esperado retorna "numérico" para este objeto:

mode(x)
## [1] "numeric"

Se, no entanto, eu executar o seguinte comando:

mode(x) <- "numeric"

O Rstudio altera "Matriz Grande" em uma matriz numérica regular:

# x:  num [1:10000, 1:5000]

Então, qual é a diferença entre esses dois objetos? Essa diferença existe apenas no Rstudio ou esses dois objetos também são diferentes no R?

Katia
fonte

Respostas:

1

No meu entendimento, "Matriz Grande" e matrixé o mesmo objeto de matriz. O que importa é como esses objetos são exibidos no ambiente global no RStudio.

O RStudio também distingue entre vetores e vetores grandes. Considere o seguinte vetor:

n <- 256
v1 <- rnorm(n*n-5)

Esse vetor está listado como um vetor grande. Agora, vamos diminuir o tamanho em um:

v2 <- rnorm(n*n-6)

De repente, torna-se um vetor normal. A estrutura dos dois objetos é a mesma (que pode ser verificada executando str). O mesmo acontece com a classe e o modo de armazenamento. O que é diferente então? Observe que o tamanho da v2memória é exatamente 512 Kb.

lobstr::obj_size(v2)
>524,288 B # or exactly 512 kB

O tamanho de v1é ligeiramente maior:

lobstr::obj_size(v1)
>524,296 B # or 512.0078125 KB

Tanto quanto eu entendo (corrija-me se estiver errado), por mera conveniência, o RStudio exibe objetos com mais de 512 kB de maneira diferente.

slava-kohut
fonte