Was ist der Unterschied zwischen „großer Matrix“ und regulärer numerischer Matrix?

8

Wenn eine relativ große Matrix erstellt wird, markiert Rstudio sie in seinem Umgebungsfenster als große Matrix:

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

Die erwartete mode () -Funktion gibt für dieses Objekt "numerisch" zurück:

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

Wenn ich jedoch den folgenden Befehl ausführe:

mode(x) <- "numeric"

Rstudio ändert "Large Matrix" in eine reguläre numerische Matrix:

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

Was ist der Unterschied zwischen diesen beiden Objekten? Existiert dieser Unterschied nur in Rstudio oder unterscheiden sich diese beiden Objekte auch in R?

Katia
quelle

Antworten:

1

Nach meinem Verständnis ist "Large Matrix" und matrixdas gleiche Matrixobjekt. Entscheidend ist, wie diese Objekte in der globalen Umgebung in RStudio angezeigt werden .

RStudio unterscheidet auch zwischen Vektoren und großen Vektoren. Betrachten Sie den folgenden Vektor:

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

Dieser Vektor wird als großer Vektor aufgeführt. Verringern wir nun die Größe um eins:

v2 <- rnorm(n*n-6)

Plötzlich wird es ein normaler Vektor. Die Struktur beider Objekte ist gleich (was durch Ausführen überprüft werden kann str). So ist ihre Klasse und Speichermodus. Was ist dann anders? Beachten Sie, dass die Größe des v2Speichers genau 512 KB beträgt.

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

Die Größe von v1ist etwas größer:

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

Soweit ich weiß (korrigieren Sie mich, wenn ich falsch liege), zeigt RStudio Objekte, die größer als 512 kB sind, der Einfachheit halber unterschiedlich an.

Slava-Kohut
quelle