Recherche…


Numérique

Numeric représente des nombres entiers et doubles et est le mode par défaut attribué aux vecteurs de nombres. La fonction is.numeric() évaluera si un vecteur est numérique. Il est important de noter que bien que les entiers et les doubles passeront is.numeric() , la fonction as.numeric() tentera toujours de convertir en 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

Les doublons sont la valeur numérique par défaut de R. Ce sont des vecteurs à double précision, ce qui signifie qu'ils occupent 8 octets de mémoire pour chaque valeur du vecteur. R n'a pas de type de données précis et tous les nombres réels sont donc stockés dans le format double précision.

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

Les entiers sont des nombres entiers qui peuvent être écrits sans composant fractionnaire. Les entiers sont représentés par un nombre avec un L après lui. Tout nombre sans L après ce sera considéré comme un double.

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

Bien que, dans la plupart des cas, l'utilisation d'un nombre entier ou double ne compte pas, remplacer parfois les doubles par des nombres entiers consommera moins de mémoire et de temps de fonctionnement. Un double vecteur utilise 8 octets par élément tandis qu'un vecteur entier utilise seulement 4 octets par élément. À mesure que la taille des vecteurs augmente, l'utilisation de types appropriés peut accélérer considérablement les processus.

#  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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow