먼저 S3에 대해서는 여기 참조. S4 클래스로 프로그래밍을 하기 위해서 기본적으로 다음 함수들을 시용해야 한다.
-
setClass()
-
new()
-
setGeneric()
-
setMethod()
클래스
새로운 클래스는 다음처럼 setClass()
함수를 이용하여 정의한다.
setClass("circle", representation(x="numeric", y="numeric", r="numeric"))이제
new()
를 이용하여 인스턴스를 만들 수 있다. 객체의 속성을 S4에서늘 슬롯(slot)이라고 한다. 슬롯은 object@slot
형태로
접근할 수 있다.
> a <- new("circle", x=5, y=10, r=4) > str(a) Formal class 'circle' [package ".GlobalEnv"] with 3 slots ..@ x: num 5 ..@ y: num 10 ..@ r: num 4 > a@x [1] 5 > a@y [1] 10 > a@r [1] 4한 객체가 특정 클래스에 속하는지 체크할 때는
is()
를 이용한다.
> is(a, "circle") [1] TRUE
메소드
메소드는 setMethod()
를 이용하여 정의한다. 기존의 정의된 generic function이 없다면 우선 generic function부터
만들어야 하는데 이때에는 setGeneric()
을 이용한다. 예를 들면 다음처럼 한다.
setGeneric("area", function(object) standardGeneric("area")) setMethod("area", "circle", function(object) pi * object@r^2 )이제 메소드를 사용해 보면
> area(a) [1] 50.26548 > area(new("circle", x=3, y=4, r=3)) [1] 28.27433
한 generic function에 어떤 method들이 있는지 알고 싶을 때는 showMethods()
를 이용한다.
> showMethods("area") Function: area (package .GlobalEnv) object="circle"
참조
- http://www.soph.uab.edu/Statgenetics/Events/Rshort/060227-8-s4slides.pdf
- John M. Chambers (2008), Software for data analysis: programming with R, Springer.
댓글 없음:
댓글 쓰기