mtext ggplot change r types

ggplot - ¿Cuál es la diferencia entre `1L` y` 1`?



r plot legend (4)

De la sección de constantes de la definición de lenguaje R :

Podemos usar el sufijo ''L'' para calificar cualquier número con la intención de convertirlo en un entero explícito. Entonces ''0x10L'' crea el valor entero 16 a partir de la representación hexadecimal. La constante 1e3L da 1000 como un número entero en lugar de un valor numérico y es equivalente a 1000L. (Tenga en cuenta que la ''L'' se considera calificar el término 1e3 y no el 3.) Si calificamos un valor con ''L'' que no es un valor entero, por ejemplo 1e-3L, recibimos una advertencia y el valor numérico es creado. También se crea una advertencia si hay un punto decimal innecesario en el número, por ejemplo, 1.L.

A menudo veo el símbolo 1L (o 2L , 3L , etc.) aparecer en el código R. ¿Cuál es la diferencia entre 1L y 1 ? 1==1L evalúa como TRUE . ¿Por qué se usa 1L en el código R?


Entonces, @James y @Brian explicaron qué significa 3L. ¿ Pero por qué lo usarías?

La mayoría de las veces no hace ninguna diferencia, pero a veces puede usarlo para que su código se ejecute más rápido y consuma menos memoria . Un vector doble ("numérico") usa 8 bytes por elemento. Un vector entero usa solo 4 bytes por elemento. Para vectores grandes, se trata de una memoria menos desperdiciada y menos para la CPU (por lo que suele ser más rápida).

Principalmente esto aplica cuando se trabaja con índices. Aquí hay un ejemplo donde al sumar 1 a un vector entero lo convierte en un vector doble:

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)

... pero también tenga en cuenta que trabajar excesivamente con enteros puede ser peligroso:

1e9L * 2L # Works fine; fast lean and mean! 1e9L * 4L # Ooops, overflow!

... y como @Gavin señaló, el rango para los enteros es aproximadamente -2e9 a 2e9.

Sin embargo, una advertencia es que esto se aplica a la versión R actual (2.13). R podría cambiar esto en algún momento (los enteros de 64 bits serían dulces, lo que podría permitir vectores de longitud> 2e9). Para estar seguro, debe usar .Machine$integer.max cada vez que necesite el valor entero máximo (y anularlo por el mínimo).


L especifica un tipo entero, en lugar de un doble que la clase numérica estándar.

> str(1) num 1 > str(1L) int 1


Para crear explícitamente un valor entero para una constante, puede llamar a la función como.integer o más simplemente use el sufijo "L".