Lovetoken

저는 개발 취향을 가진 데이터 분석가 Jr. 입니다.

Navigation
 » Home
 » About Me
 » Github

R에서 S3 최소재현예제

12 Jun 2016 » R



Hands-On Programming with R (Garrett Grolemund)

책에서 설명된 S3 에 의하면

  1. 제너릭 함수 (generic function)
  2. 메서드 (method)
  3. 클래스 (class)

3개의 기반 디스패치를 가리켜 S3라고 한다.

하지만 저런용어가 쉽게 와닿지 않는 상태에서 이해하기란 쉽지 않았다.
때문에 R의 S3 가 무엇인지 빠르게 체감해 볼 수 있도록 샐프 코드를 만들어 보았다.
최소재현예제 이므로 코드실행에 5분만 투자한다면 큰 체감을 얻을 수 있을것으로 예상된다.
어떠한 부가설명도 없는 코드를 아래와 같이 공유하고자 한다.



Generic function

lovetoken <- function(x){
  UseMethod("lovetoken")
}



Method

lovetoken.default <- function(x){
  x
}
lovetoken.class1 <- function(x){
  c(sum(x), mean(x))
}
lovetoken.class2 <- function(x){
  c(var(x), sd(x))
}



Class

test <- 0:10
lovetoken(test) # `lovetoken.default(test)` 를 실행하는 것과 동일
##  [1]  0  1  2  3  4  5  6  7  8  9 10
class(test) <- "class1"
lovetoken(test) # `lovetoken.class1(test)` 를 실행하는 것과 동일
## [1] 55  5
class(test) <- "class2"
lovetoken(test) # `lovetoken.class2(test)` 를 실행하는 것과 동일
## [1] 11.000000  3.316625
class(test) <- "unknown"
lovetoken(test) # `lovetoken.default(test)` 를 실행하는 것과 동일
##  [1]  0  1  2  3  4  5  6  7  8  9 10
## attr(,"class")
## [1] "unknown"