R에서 정수 클래스와 숫자 클래스의 차이점은 무엇입니까?
저는 제가 절대적인 프로그래밍 초보자라고 말하면서 이것을 서문을 쓰고 싶으니, 이 질문이 얼마나 기본적인 것인지 양해해 주십시오.
저는 R의 "원자" 수업에 대해 더 잘 이해하려고 노력하고 있으며 아마도 이것은 일반적인 프로그래밍 수업에 적용될 것입니다.문자, 논리 및 복잡한 데이터 클래스의 차이는 이해하지만 숫자 클래스와 정수 클래스의 근본적인 차이를 찾기 위해 고군분투하고 있습니다.
제가 단순한 벡터를 가지고 있다고 가정해 보겠습니다.x <- c(4, 5, 6, 6)
정수의 경우, 이것이 정수 클래스가 되는 것이 타당할 것입니다.하지만 내가 할 때는class(x)
알겠습니다[1] "numeric"
이 클래스로 하면 그면벡를정수클래변로환면하스이터러▁then면▁to변.x <- as.integer(x)
클래스가 다르다는 것을 제외하고 동일한 정확한 숫자 목록을 반환합니다.
제 질문은 왜 그런지, 그리고 정수 집합에 대한 기본 클래스가 숫자 클래스인 이유와 정수 대신 숫자로 설정된 정수의 장단점은 무엇인지에 대한 것입니다.
"숫자" 클래스로 그룹화된 여러 클래스가 있으며, 이중(두 배 정밀 부동 소수점 번호의 경우)과 정수가 가장 일반적입니다.R은 필요할 때 숫자 클래스 간에 자동으로 변환되므로 숫자 3이 현재 정수로 저장되어 있는지 또는 이중으로 저장되어 있는지 여부는 대부분 일반 사용자에게 중요하지 않습니다.대부분의 수학은 이중 정밀도를 사용하여 수행되므로 기본 스토리지인 경우가 많습니다.
벡터가 이중(ID 값 또는 인덱싱으로 사용됨)으로 변환되지 않을 경우 정수로 특정 벡터를 저장할 수 있습니다. 정수에는 저장 공간이 더 적게 필요하기 때문입니다.하지만 만약 그것들이 그것들을 2배로 변환하는 어떤 수학에도 사용된다면, 아마도 그것들을 처음부터 2배로 저장하는 것이 가장 빠를 것입니다.
Quora의 Patrick Burns는 다음과 같이 말합니다.
먼저, 수년 동안 R을 성공적으로 사용하는 것은 완벽하게 실현 가능하며 이 질문에 대한 답을 알 필요가 없습니다.R은 백그라운드에서 사용자에 대한 (일반적인) 숫자와 정수 간의 차이를 처리합니다.
> is.numeric(1) [1] TRUE > is.integer(1) [1] FALSE > is.numeric(1L) [1] TRUE > is.integer(1L) [1] TRUE
(정수 뒤에 대문자 'L'을 붙이면 강제로 정수로 저장됩니다.)
보시다시피 "정수"는 "숫자"의 부분 집합입니다.
> .Machine$integer.max [1] 2147483647 > .Machine$double.xmax [1] 1.797693e+308
정수는 20억보다 조금 더 큰 반면, 다른 숫자들은 훨씬 더 클 수 있습니다.두 배의 정밀 부동 소수점 번호로 저장되기 때문에 크기가 더 커질 수 있습니다.즉, 지수(위의 308과 같이 10진수가 아닌 2진수를 제외하고)와 "significantand"(위의 1.797693과 같이)의 두 부분으로 숫자가 저장됩니다.
'is.integer'는 정수가 있는지 여부에 대한 검정이 아니라 데이터가 저장되는 방식에 대한 검정입니다.
한 가지 주의할 점은 대장 수술자가:
시작점과 끝점이 정수인 경우 정수를 반환합니다.를 들면, 들면를예,1:5
.integer
부터 51까지의 는 5부터 입니다. 문자를 .L
.
> class(1:5)
[1] "integer"
참조: https://www.quora.com/What-is-the-difference-between-numeric-and-integer-in-R
페이지를 해 보십시오).?integer
부분 지뢰:), 볼드 지뢰:
정수 벡터는 데이터가 예상되는 C 또는 Fortran 코드로 전달될 수 있도록 존재하며, 따라서 (작은) 정수 데이터를 정확하고 간결하게 표현할 수 있습니다.
R의 현재 구현은 정수 벡터에 32비트 정수를 사용하므로 표시 가능한 정수의 범위는 약 +/-2*10^9로 제한됩니다. 2배는 훨씬 더 큰 정수를 정확하게 포함할 수 있습니다.
도움말 페이지에 나와 있는 것처럼, R의integer
s는 -2147483648 ~ +2147483647 사이의 부호가 있는 32비트 숫자이며 4바이트를 차지합니다.
R'snumeric
64비트 과 동일합니다.double
IEEE 754 표준을 준수합니다.R에는 단일 정밀도 데이터 유형이 없습니다.(출처: 도움말 페이지)numeric
그리고.double
) 이중은 정확도를 잃지 않고 -2^53과 2^53 사이의 모든 정수를 정확하게 저장할 수 있습니다.
벡터(소스)의 오버헤드를 포함한 데이터 유형 크기를 확인할 수 있습니다.
> object.size(1:1000)
4040 bytes
> object.size(as.numeric(1:1000))
8040 bytes
제가 알기로는 데이터 유형을 가진 변수를 선언하지 않기 때문에 기본적으로 R은 L이 없는 숫자를 숫자로 설정합니다.다음을 작성한 경우:
> x <- c(4L, 5L, 6L, 6L)
> class(x)
>"integer" #it would be correct
정수의 예:
> x<- 2L
> print(x)
숫자의 예(다른 프로그래밍 언어의 이중/부동과 같은 종류)
> x<-3.4
> print(x)
숫자는 여러 유형의 클래스(예: 이중 및 정수)를 포괄하는 용어입니다.정수는 소수점이 없는 숫자이므로 메모리에 최소 공간으로 저장됩니다.정수 클래스는 해당 숫자로 계산할 때만 사용하고, 그렇지 않으면 숫자로 되돌립니다.
언급URL : https://stackoverflow.com/questions/23660094/whats-the-difference-between-integer-class-and-numeric-class-in-r
'programing' 카테고리의 다른 글
Active Directory를 사용하는 .NET의 사용자 그룹 및 역할 관리 (0) | 2023.06.10 |
---|---|
C와 C++ 표준 사이의 관계는 무엇입니까? (0) | 2023.06.10 |
UIViewControllerContextTransition을 사용하여 "From ViewController"가 사라짐 (0) | 2023.06.05 |
ggplot2 구문이 타당할 때 RCMD 검사 "글로벌 변수에 대한 가시적 바인딩 없음" 참고 사항을 어떻게 처리할 수 있습니까? (0) | 2023.06.05 |
대화형 Python 셸에서 마지막 결과 가져오기 (0) | 2023.06.05 |