identical, all equal 함수의 차이

identical(), all.equal() 함수의 차이

  • R은 두 객체가 같은지를 비교하는 함수로 identical()과 all.equal()을 지원한다.
  • 한데, 두 함수에는 차이가 있다. identical 함수는 두 개의 객체가 “정확히(exactly)” 같은지를 비교한다: 같다면 TRUE, 다르다면 FALSE를 반환한다. 반면, all.equal 함수는 미미한 오차를 무시하고, 두 변수가 다른 경우 그 차이의 값을 반환한다(R Documentation, all.equal 함수 설명).


  • 이를테면 다음의 예시를 보자. 여기서 변수 x는 numeric이며 y는 integer이다. identical 함수는 이 둘이 다르다고 엄격히 판단해 FALSE를 반환하며, all.equal 함수는 변수 유형은 다르나 값이 같기 때문에 TRUE를 반환하는 것을 볼 수 있다.
x <- 1; y <- 1L
identical(x, y)
## [1] FALSE
all.equal(x, y)
## [1] TRUE


그렇다면 값이 아주 약간 다른 두 변수에 대해 all.equal 함수는 어떻게 판단할까? 아래의 코드에서 변수 approxe는 매클로린 급수를 사용해 10차 항까지 오일러 수 e를 근사한 것이고, 변수 e는 R의 기본 지수함수를 사용해 만들어진 오일러 수 e이다. 이 둘을 all.equal 함수는 같다고 판단함을 아래에서 볼 수 있다. (어느 오차까지를 눈 감아 줄 것이냐를 tolerance argument를 사용해 설정할 수 있는데, 기본값은 약 1.5e-8이다.)

\[ \text{approxe} = \sum_{n=0}^{10}\frac{1}{n!} \approx e \]

emake <- function(){
  e <- 0
  for (n in 0:10){
    e <- e + 1/(factorial(n))
  }
  return(e)
}
approxe <- emake(); e <- exp(1)
all.equal(e, approxe)
## [1] TRUE
identical(e, approxe)
## [1] FALSE
  • 한편 all.equal 함수에 tolerance argument를 추가해 어느 정도의 오차까지를 허용할지 결정할 수 있다.
all.equal(e, approxe, tolerance = 0)
## [1] "Mean relative difference: 1.004777e-08"

'기타 공부' 카테고리의 다른 글

[R] 함수 만들기 기초  (0) 2018.06.03
[R] 자료 객체 (3): 배열 (array)  (0) 2018.06.03
[R] 자료 객체 (2): 행렬 matrix  (0) 2018.05.27
[R] 자료 객체 (1): 벡터 vector  (0) 2018.05.27
[R] 변수 할당 및 데이터 유형  (0) 2018.05.27