본문 바로가기
프로그래밍/R

1-5. 동등 여부 테스트

by -옌 2022. 7. 14.

 

r에서 프로그래밍을 하다보면 종종 결괏값에 의문을 가지게 되는 상황이 생긴다. 

아래와 같은 예시들을 보자.

 

x <- sqrt(2)
x*x == 2
## [1] FALSE

 

코드 해석: √2의 제곱이 2인가?라고 물었을 때 실제로는 TRUE이지만 r에서는 FALSE라는 결괏값이 출력된다.

 

sin(2*pi)==0
## [1] FALSE

코드해석:  sin(2pi), 즉 sin(180º)의 값이 0인가?라고 물었을 때 실제로는 TRUE이지만 r에서는 FALSE라는 결괏값이 출력된다.

 

x <- sqrt(2)
x*x-2
## [1] 4.440892e-16

코드해석: √2의 제곱에서 2를 빼면 0인가?라고 물었을 때 실제로는 0이 출력되어야 하지만 4.440892e-16(0에 가까운 값)이라는 값이 출력된다.

 

 

 

위와 같은 결과들은 x==y나 x!=y처럼 일반적인 일치검사를 실행했을 때, x와 y의 형이 다르거나 길이가 다르기 때문에 일어나는 오류들이다. 

따라서 반환값이 벡터가 될 가능성도 있으므로 함수 identical()을 사용하는 편이 안전하고, R에서도 identical() 함수를 이용하는 일치 검사를 권장한다.

혹은 all.equal() 함수를 이용해 매우 작은 차이를 무시하고 두 변수가 "거의 같은지"를 검사할 수도 있다. 

 

 

 

1. identical()을 이용한 동등 여부 확인

x <- 1
typeof(x)
## [1] "double"

y <- 1.
typeof(y)
## [1] "double"

z <- 1.00000001
typeof(z)
## [1] "double"

코드해석:  x, y, z에 값을 대입하고 typeof() 함수를 이용해 x, y, z의 자료형을 출력한 결과, 세 값 모두 "double"이라고 출력되었으므로 실수형임을 알 수 있다.

 

 

1. all.equal을 이용한 동등 여부 확인

관계 비교 연산자 "==" 혹은 identical 함수를 사용하면 두 값이 정확히 (컴퓨터에서 인식하는 오류 없이) 같을 때 TRUE, 같지 않을 때 FALSE를 출력한다.

x <- 0.3-0.2
y <- 0.1
x==y
## [1] FALSE

identical(x,y)
## [1] FALSE

 

all.equal 함수

x <- 0.3-0.2
y <- 0.1
all.equal(x,y)  # 미미한 차이를 허용
## [1] TRUE

 

 

 

 

 

 

728x90

'프로그래밍 > R' 카테고리의 다른 글

1-4. 논리연산자  (0) 2022.07.13
1-3. 수열의 생성  (0) 2022.05.24
1-2. 여러가지 수학 함수들  (0) 2022.05.24
1-1. 숫자 벡터의 생성과 연산  (0) 2022.05.23

댓글