R Language
Klasy numeryczne i tryby przechowywania
Szukaj…
Numeryczne
Numeryczna reprezentuje liczby całkowite i podwajające się i jest domyślnym trybem przypisanym do wektorów liczb. Funkcja is.numeric()
oceni, czy wektor jest liczbą. Należy zauważyć, że chociaż liczby całkowite i liczby podwójne przejdą is.numeric()
, funkcja as.numeric()
zawsze będzie próbowała przekonwertować na typ double.
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
Podwójne są domyślną wartością liczbową R. Są to wektory o podwójnej precyzji, co oznacza, że zajmują 8 bajtów pamięci na każdą wartość w wektorze. R nie ma jednego typu danych o pojedynczej precyzji, więc wszystkie liczby rzeczywiste są przechowywane w formacie podwójnej precyzji.
is.double(1)
TRUE
is.double(1.0)
TRUE
is.double(1L)
FALSE
Liczby całkowite to liczby całkowite, które można zapisać bez części ułamkowej. Liczby całkowite są reprezentowane przez liczbę z L po nim. Każda liczba bez litery L będzie później uznana za podwójną.
typeof(1)
[1] "double"
class(1)
[1] "numeric"
typeof(1L)
[1] "integer"
class(1L)
[1] "integer"
Chociaż w większości przypadków użycie liczby całkowitej lub liczby podwójnej nie będzie miało znaczenia, czasami zastąpienie liczb podwójnych liczbami całkowitymi zużyje mniej pamięci i czasu pracy. Wektor podwójny wykorzystuje 8 bajtów na element, podczas gdy wektor liczb całkowitych wykorzystuje tylko 4 bajty na element. Wraz ze wzrostem wielkości wektorów stosowanie odpowiednich typów może znacznie przyspieszyć procesy.
# 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