[r] `1L`과`1`의 차이점은 무엇입니까?

나는 종종 기호를 볼 1L(또는 2L, 3L등) R 코드에 나타납니다. 무슨 사이의 차이 1L1? 1==1L로 평가됩니다 TRUE. 1LR 코드에서 왜 사용됩니까?



답변

@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을 위해서는 최대 정수 값이 필요할 때마다 사용해야 합니다 (최소값은 무시).


답변

R 언어 정의상수 섹션 에서 :

‘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”접미사를 사용하면됩니다.


답변