Suche…


Numerisch

Numerisch stellt Ganzzahlen und Verdopplungen dar und ist der Standardmodus, der Zahlenvektoren zugewiesen wird. Die Funktion is.numeric() prüft, ob ein Vektor numerisch ist. Es ist wichtig zu beachten, dass is.numeric() und Doubles zwar is.numeric() , die Funktion as.numeric() versucht jedoch immer, in den Typ double zu konvertieren.

x <- 12.3
y <- 12L

#confirm types
typeof(x)
[1] "double"
typeof(y)
[1] "integer"

# confirm both numeric
is.numeric(x)
[1] TRUE
is.numeric(y)
[1] TRUE

# logical to numeric
as.numeric(TRUE)
[1] 1

# While TRUE == 1, it is a double and not an integer
is.integer(as.numeric(TRUE))
[1] FALSE

Doubles sind der numerische Standardwert von R. Sie sind Vektoren mit doppelter Genauigkeit, was bedeutet, dass sie für jeden Wert im Vektor 8 Byte Speicher benötigen. R hat keinen Datentyp mit einfacher Genauigkeit, daher werden alle reellen Zahlen im Format mit doppelter Genauigkeit gespeichert.

is.double(1)
TRUE
is.double(1.0)
TRUE
is.double(1L)
FALSE

Ganzzahlen sind ganze Zahlen, die ohne gebrochene Komponente geschrieben werden können. Ganzzahlen werden durch eine Zahl mit einem L dargestellt. Jede Zahl ohne ein L danach wird als Doppelzahl betrachtet.

typeof(1)
[1] "double"
class(1)
[1] "numeric"
typeof(1L)
[1] "integer"
class(1L)
[1] "integer"

Obwohl in den meisten Fällen die Verwendung einer ganzen oder doppelten Zahl keine Rolle spielt, verbraucht das Ersetzen von doppelten Zahlen durch ganze Zahlen manchmal weniger Speicher und Betriebszeit. Ein Doppelvektor verwendet 8 Bytes pro Element, während ein Ganzzahlvektor nur 4 Bytes pro Element verwendet. Wenn die Größe der Vektoren zunimmt, kann die Verwendung geeigneter Typen Prozesse erheblich beschleunigen.

#  test speed on lots of arithmetic
microbenchmark(
  for( i in 1:100000){
  2L * i
  10L + i
},

for( i in 1:100000){
  2.0 * i
  10.0 + i
}
)
Unit: milliseconds
                                          expr      min       lq     mean   median       uq      max neval
 for (i in 1:1e+05) {     2L * i     10L + i } 40.74775 42.34747 50.70543 42.99120 65.46864 94.11804   100
   for (i in 1:1e+05) {     2 * i     10 + i } 41.07807 42.38358 53.52588 44.26364 65.84971 83.00456   100


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow