나는 종종 기호를 볼 1L
(또는 2L
, 3L
등) R 코드에 나타납니다. 무슨 사이의 차이 1L
와 1
? 1==1L
로 평가됩니다 TRUE
. 1L
R 코드에서 왜 사용됩니까?
답변
@James와 @Brian은 3L의 의미를 설명 했습니다 . 그러나 왜 그것을 사용 하시겠습니까?
이 차이가 없습니다 대부분의 시간 -하지만 때로는 당신이 그것을 사용할 수있는 정보는 다음의 제품에 코드를 얻을 빠르게 실행 및 소비 적은 메모리를 . 이중 ( “숫자”) 벡터는 요소 당 8 바이트를 사용합니다. 정수 벡터는 요소 당 4 바이트 만 사용합니다. 큰 벡터의 경우 메모리 낭비가 적고 CPU 사용이 줄어 듭니다 (일반적으로 더 빠릅니다).
대부분 인덱스로 작업 할 때 적용됩니다. 다음은 정수 벡터에 1을 추가하여 이중 벡터로 바꾸는 예입니다.
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)
… 그러나 정수로 과도하게 작업하면 위험 할 수 있습니다.
1e9L * 2L # Works fine; fast lean and mean!
1e9L * 4L # Ooops, overflow!
… @Gavin이 지적했듯이 정수의 범위는 대략 -2e9에서 2e9입니다.
경고는 이것이 현재 R 버전 (2.13)에 적용된다는 것입니다. R은 어느 시점에서 이것을 바꿀 수 있습니다 (64 비트 정수는 달콤하여 길이가 2e9보다 큰 벡터를 사용할 수 있습니다). 안전 .Machine$integer.max
을 위해서는 최대 정수 값이 필요할 때마다 사용해야 합니다 (최소값은 무시).
답변
‘L’접미사를 사용하여 명시 적 정수로 만들려는 숫자로 한정 할 수 있습니다. 따라서 ‘0x10L’은 16 진수 표현에서 정수 값 16을 만듭니다. 상수 1e3L은 1000을 숫자 값이 아닌 정수로 제공하며 1000L과 같습니다. ( ‘L’은 3이 아닌 1e3이라는 용어를 한정하는 것으로 간주됩니다.) 정수 값이 아닌 ‘L'(예 : 1e-3L)이 아닌 값을 한정하면 경고가 표시되고 숫자 값은 만들어진. 숫자에 불필요한 소수점이 있으면 경고도 생성됩니다 (예 : 1.L).
답변
L은 표준 숫자 클래스의 배가 아닌 정수 유형을 지정합니다.
> str(1)
num 1
> str(1L)
int 1
답변
상수의 정수 값을 명시 적으로 만들려면 as.integer 함수를 호출하거나 “L”접미사를 사용하면됩니다.