R의 S3 및 S4 소개
R은 함수식 언어로 여겨지지만 대상을 대상으로 프로그래밍을 지원한다. 이는 R이 대상을 프로그램의 기본 단원으로 하고 프로그램과 데이터를 봉하여 소프트웨어의 중용성, 유연성과 확장성을 높인다는 것을 의미한다.
S3
S3는 범용 함수에 기반한 대상을 대하는 방식을 생각했다.범용 함수는 들어오는 대상의 유형에 따라 어떤 구체적인 방법을 호출할지 결정할 수 있다.왜냐하면 초보자한테는 더 이해하기 쉬워요. 예를 들면.
result
비교하다
result = v1.mean()
더욱 이해하기 쉽다.
S3 대상은list이고class라는 속성이 있습니다. 예를 들어foo클래스를 만들고 클래스로 클래스를 보는 것을 설명합니다.
x
[1] 1
attr(,"class")
[1] "foo"
class(x)
[1] "foo"
S3는 공식적인 유형 간의 관계에 대한 정의가 없고 한 대상에 여러 종류가 있을 수 있으며 그class 속성은 벡터로 표현된다
class(x)
[1] "foo" "bar"
방법분파는 범용 함수(generic function)로 특정한 대상에 대한 사용 방법을 결정하는 것을 말한다.모든 범용 함수는 비슷한 형식이 있습니다. 넓은 의미의 함수 이름과 UseMethod () 를 호출해서 대상을 나누는 방법을 결정합니다.이것 또한 범용 함수의 형식을 매우 간단하게 한다. 예를 들어mean()
mean
function (x, ...)
UseMethod("mean")
UseMethod () 는 대상의class 속성에 따라 어떤 방법을 할당할지 결정하기 때문에 방법은generic이어야 합니다.class 방식으로 이름을 지정해야 UseMethod () 를 찾을 수 있습니다. 예를 들어:
mean.numeric
class 속성이 벡터 c ("foo", "bar") 라면 mean을 우선적으로 찾습니다.foo, 그리고 mean.bar, 마지막 mean.default.
bar
[1] "default"
foo
[1] "y"
class 속성은 벡터일 수 있기 때문에 S3의 계승 관계는 자연스럽게class 속성의 앞분량은 뒤의 하위 클래스로 나타난다.NextMethod () 함수는 일련의 방법을 순서대로 대상에 적용할 수 있습니다.
bar
[1] "I am son." "I am father."
S4
setClass () 함수를 사용하여 새로운 S4 형식을 정의할 수 있습니다.새 클래스로 회의 참여자를 나타냅니다.representation 매개 변수는 클래스의 속성 (slot)과 유형을 정의하는 데 사용됩니다.
setClass(Class = "Person", representation(name = "character", age = "numeric"))
S4는 S3보다 더 엄격한 계승 관계가 있는데 contains 매개 변수로 표시한다.예를 들어 새로운 클래스가 회의의 강연자를 표시하면 강연자 클래스는 참여자 클래스의 하위 클래스이다.하위 클래스는 자동으로 상위 클래스의 모든 속성을 계승하고 새로운 속성을 정의할 수 있습니다.
setClass(Class = "Reporter", representation(title = "character"), contains = "Person")
new () 함수로 어떤 종류의 대상을 새로 만듭니다.이 때 S4는 각 속성의 초기 값 유형이 클래스를 정의할 때 주어진 유형과 일치하는지 확인하고 그렇지 않으면 대상을 만들 수 없습니다.
yuchen
An object of class "Reporter"
Slot "title":
[1] "R and OOP"
Slot "name":
[1] "yuchen"
Slot "age":
[1] 22
S3에서는 보통 $를 사용하여 대상의 속성에 접근하지만, S4 대상에서는 @을 사용합니다.또는 속성 이름을 알았을 때, slot () 를 사용하여 볼 수 있습니다.
yuchen@name
slot(yuchen, "name")
[1] "yuchen"
[1] "yuchen"
일반 함수를 작성하는 방법은 S3과 유사하지만 setGeneric () 함수를 사용합니다.이 함수의 두 번째 매개 변수는 필요한 모든 매개 변수를 정의하는 함수이며 표준Generic () 함수를 호출해야 합니다.
setGeneric("prepare", function(object) {
standardGeneric("prepare")
})
[1] "prepare"
작성 방법의 정의는 setMethod () 함수를 사용하고signature () 함수로 향하는 유형을 정의합니다.
setMethod("prepare", signature(object = "Person"), function(object) {
cat("Got Materials.
")
})
[1] "prepare"
prepare(new("Person"))
Got Materials.
is () 함수는 대상의 유형을 볼 수 있고 getSlots () 함수는 클래스의 모든 속성의 정의를 볼 수 있습니다.showMethods () 는 일반 함수가 정의된 방법을 보는 데 사용됩니다.Bioconductor와 Matrix 패키지는 모두 S4 대상을 바탕으로 하고 좋은 프로그래밍 방식을 따르기 때문에 더욱 연구할 수 있는 재료가 될 수 있다.
내용은 사용자 왕우천의 대답을 참고합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.