Programing

R에서 정수 클래스와 숫자 클래스의 차이점은 무엇입니까

lottogame 2020. 10. 15. 07:20
반응형

R에서 정수 클래스와 숫자 클래스의 차이점은 무엇입니까


나는 절대적인 프로그래밍 초보자라고 말하면서 이것을 시작하고 싶으 므로이 질문이 얼마나 기본적인지 용서하십시오.

나는 R의 "원자"클래스에 대해 더 잘 이해하려고 노력하고 있으며 아마도 이것은 일반적으로 프로그래밍 클래스에 해당 될 것입니다. 문자, 논리 및 복잡한 데이터 클래스의 차이점을 이해하지만 숫자 클래스와 정수 클래스의 근본적인 차이점을 찾기 위해 고군분투하고 있습니다.

간단한 x <- c(4, 5, 6, 6)정수 벡터가 있다고 가정 해 봅시다. 이것이 정수 클래스 인 것이 합리적입니다. 내가 할 때 class(x)내가 얻을 [1] "numeric". 그런 다음이 벡터를 정수 클래스로 변환합니다 x <- as.integer(x). 클래스가 다르다는 점을 제외하고는 정확히 동일한 숫자 목록을 반환합니다.

내 질문은 왜 이것이 사실이며, 정수 세트의 기본 클래스가 숫자 클래스 인 이유와 정수 대신 숫자로 정수를 설정하는 것의 장점과 단점은 무엇인지입니다.


"숫자"클래스로 함께 그룹화되는 여러 클래스가 있으며, 그중 가장 일반적인 2 개는 double (배정 밀도 부동 소수점 숫자의 경우) 및 정수입니다. R은 필요할 때 숫자 클래스간에 자동으로 변환하므로 대부분의 경우 숫자 3이 현재 정수로 저장되어 있는지 또는 두 배로 저장되어 있는지 여부는 일반 사용자에게 중요하지 않습니다. 대부분의 수학은 배정 밀도를 사용하여 수행되므로 이것이 종종 기본 저장소입니다.

정수가 저장 공간을 덜 필요로하므로 벡터를 double로 변환하지 않을 것임을 알고있는 경우 (ID 값 또는 인덱싱으로 사용됨) 특별히 벡터를 정수로 저장할 수 있습니다. 그러나 그것들을 double로 변환하는 수학에서 사용한다면, 처음부터 double로 저장하는 것이 가장 빠를 것입니다.


먼저, R을 수년 동안 성공적으로 사용하는 것이 완벽하게 가능하며이 질문에 대한 답을 알 필요가 없습니다. R은 백그라운드에서 (일반적인) 숫자와 정수의 차이를 처리합니다.

> is.numeric(1)

[1] TRUE

> is.integer(1)

[1] FALSE

> is.numeric(1L)

[1] TRUE

> is.integer(1L)

[1] TRUE

(정수 뒤에 대문자 'L'을 넣으면 정수로 저장됩니다.)

보시다시피 "integer"는 "numeric"의 하위 집합입니다.

> .Machine$integer.max

[1] 2147483647

> .Machine$double.xmax

[1] 1.797693e+308

정수는 20 억이 조금 넘지 만 다른 숫자는 훨씬 더 클 수 있습니다. 배정 밀도 부동 소수점 숫자로 저장되기 때문에 더 클 수 있습니다. 이것은 숫자가 지수 (위의 308과 같고, 밑이 10이 아닌 2를 제외하고)와 "유효"(위의 1.797693과 같은)의 두 부분으로 저장된다는 것을 의미합니다.

'is.integer'는 정수가 있는지 여부를 테스트하는 것이 아니라 데이터가 저장되는 방식에 대한 테스트입니다.

주의해야 할 :점은 시작점과 끝 점이 정수인 경우 콜론 연산자 는 정수를 반환한다는 것입니다. 예를 들어 는 1에서 5까지의 숫자로 1:5구성된 integer벡터를 만듭니다 L. 문자를 추가 할 필요가 없습니다 .

> class(1:5)
[1] "integer"

참조 : https://www.quora.com/What-is-the-difference-between-numeric-and-integer-in-R


내 이해에-우리는 데이터 유형으로 변수를 선언하지 않으므로 기본적으로 R은 L이없는 숫자를 숫자로 설정했습니다. 당신이 쓴 경우 :

> x <- c(4L, 5L, 6L, 6L)
> class(x)
>"integer" #it would be correct

정수의 예 :

> x<- 2L
> print(x)

숫자의 예 (다른 프로그래밍 언어의 double / float와 유사)

> x<-3.4
> print(x)

도움말 페이지를 인용하려면 (try ?integer), 굵게 표시된 부분은 다음과 같습니다.

정수 벡터는 데이터를 예상하는 C 또는 Fortran 코드로 전달할 수 있도록 존재하므로 (작은) 정수 데이터를 정확하고 간결하게 표현할 수 있습니다 .

R의 현재 구현은 정수 벡터에 32 비트 정수를 사용하므로 표현 가능한 정수의 범위는 약 +/- 2 * 10 ^ 9로 제한됩니다. double은 훨씬 더 큰 정수를 정확하게 보유 할 수 있습니다.

Like the help page says, R's integers are signed 32-bit numbers so can hold between -2147483648 and +2147483647 and take up 4 bytes.

R's numeric is identical to an 64-bit double conforming to the IEEE 754 standard. R has no single precision data type. (source: help pages of numeric and double). A double can store all integers between -2^53 and 2^53 exactly without losing precision.

We can see the data type sizes, including the overhead of a vector (source):

> object.size(1:1000)
4040 bytes
> object.size(as.numeric(1:1000))
8040 bytes

참고URL : https://stackoverflow.com/questions/23660094/whats-the-difference-between-integer-class-and-numeric-class-in-r

반응형