먼저 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.
댓글 없음:
댓글 쓰기