J’ai souvent vu le symbole (ou
, , etc.) apparaissent dans le code R. Quelle est la différence entre
et ?
a la valeur . Pourquoi est
utilisé dans le code de la R ?
Réponses
Trop de publicités?Donc, @James et @Brian a expliqué ce qu' 3L moyens. Mais pourquoi voulez-vous l'utiliser?
La plupart du temps il ne fait aucune différence, mais parfois vous pouvez utiliser pour obtenir votre code de courir plus vite et consomme moins de mémoire. Un double ("numérique") vecteur utilise 8 octets par élément. Un entier vecteur utilise seulement 4 octets par élément. Pour les grands vecteurs, c'est moins de perte de mémoire et de moins en moins à parcourir pour le CPU (de sorte qu'il est généralement plus rapide).
La plupart du temps il s'applique lorsque l'on travaille avec des indices. Voici un exemple où l'ajout de 1 à un nombre entier de vecteur en fait un double vecteur:
x <- 1:100
typeof(x) # integer
y <- x+1
typeof(y) # double, twice the memory size
object.size(y) # 840 bytes (on win64)
z <- x+1L
typeof(z) # still integer
object.size(z) # 440 bytes (on win64)
...mais aussi de noter que le travail excessivement avec les nombres entiers peuvent être dangereux:
1e9L * 2L # Works fine; fast lean and mean!
1e9L * 4L # Ooops, overflow!
...et comme @Gavin souligné, la gamme pour les entiers est à peu près -2e9 pour 2e9.
Une mise en garde cependant, c'est que cela s'applique à la version R (2.13). R peut le changer à un certain point (les entiers 64 bits serait doux, ce qui pourrait permettre de vecteurs de longueur > 2e9). Pour être sûr, vous devez utiliser .Machine$integer.max
quand vous avez besoin le maximum de valeur de type entier (et nier que pour le minimum).
À partir de la Section Constantes du Langage R Définition:
Nous pouvons utiliser le ‘L' suffixe pour qualifier n'importe quel nombre avec l'intention d'en faire une entière explicite. Si "0x10L' crée la valeur de l'entier 16 de la représentation hexadécimale. La constante 1e3L donne 1000 comme un entier plutôt qu'une valeur numérique et est équivalent à 1000L. (Notez que l' "L" est considérée comme éligible, le terme 1e3 et pas le 3.) Si nous nous qualifions d'une valeur avec un " L " qui est pas un nombre entier, par exemple 1e-3L, nous obtenons un message d'avertissement et la valeur numérique est créé. Un avertissement est également créé si il n'y est inutile, du point décimal du nombre, par exemple 1.L'.