programing

R에서 "S3 메소드"는 무엇을 의미합니까?

i4 2023. 6. 25. 18:23
반응형

R에서 "S3 메소드"는 무엇을 의미합니까?

저는 R에 상당히 익숙하지 않기 때문에 S3 방법과 객체가 무엇인지 잘 모르겠습니다.S3와 S4 객체 시스템이 있다는 것을 알게 되었고, 일부는 가능하면 S4보다 S3를 사용할 것을 권장합니다(http://google-styleguide.googlecode.com/svn/trunk/google-r-style.html)* 의 Google R Style Guide 참조).하지만 저는 S3 메소드/오브젝트의 정확한 정의를 알지 못합니다.

업데이트: 2019년 현재 Google의 R 스타일 가이드 하이퍼링크가 있습니다.

대부분의 관련 정보는 다음을 참조하여 확인할 수 있습니다.?S3또는?UseMethod하지만 간단히 말해서,

S3는 방법 파견 계획을 말합니다.만약 당신이 R을 한동안 사용했다면, 당신은 그것이 있다는 것을 알게 될 것입니다.print,predict그리고.summary다양한 종류의 물체에 대한 방법.

S3에서 이것은 다음과 같이 작동합니다.

  • ▁to▁call▁method(설▁of)glm품위가 있습니다.glm)
  • 을 가진 방법(예: 예방제법공진가을이름반일예▁with(제▁method)을 하는 것:print 이름 점, 클스예이름래예이(름▁),,:스▁then클▁and래▁then,(":print.glm)
  • 이름에 입니다.print하려면 , 단순히 이름을 에는 이것이 이 기능을 사용하려면 기존 메서드 이름을 준수해야 하지만, 이 기능이 필요하지 않습니다(사용자가 이전에 언급한 도움말을 참조하십시오.

보는 사람, 특히 당신이 새로 만든 펑키 모델 피팅 패키지의 사용자의 눈에는, 타이핑할 수 있는 것이 훨씬 더 편리합니다.predict(myfit, type="class")predict.mykindoffit(myfit, type="class").

더 많은 것들이 있지만, 이것이 여러분을 시작하게 할 것입니다.객체의 속성(클래스)을 기반으로 하는 방법을 파견하는 방법에는 꽤 많은 단점이 있지만(그리고 C 순수주의자들은 아마도 그것을 두려워하여 밤에 깨어있을 것입니다), 많은 상황에서, 그것은 적절하게 작동합니다.현재 버전의 R에서는 새로운 방법(S4 및 참조 클래스)이 구현되었지만 대부분의 사람들은 여전히 S3를 사용합니다.

하려면 S3의 하십시오.median기능.타자 치기median명령 프롬프트에서 신체에 한 줄, 즉

UseMethod("median")

그것은 그것이 S3 방법이라는 것을 의미합니다.다시 말해서, 당신은 다른 것을 가질 수 있습니다.median다른 S3 클래스에 대한 함수입니다.가능한 모든 중위수 방법을 나열하려면 다음과 같이 입력합니다.

methods(median) #actually not that interesting.  

이 경우에는 기본값이라는 한 가지 방법만 사용할 수 있습니다. 이 방법은 무엇이든 호출됩니다.입력하면 해당 코드를 볼 수 있습니다.

median.default

더 는 훨씬더흥예는운로미입니다.print함수, 즉 다양한 방법을 사용합니다.

methods(print)  #very exciting

일부 방법은 다음과 같습니다.*그들의 이름 옆에 s.즉, 일부 패키지의 네임스페이스 안에 숨겨져 있습니다.사용하다find그들이 어떤 소포 안에 있는지 알기 위해.를 들어, .

find("acf")  #it's in the stats package
stats:::print.acf

http://adv-r.had.co.nz/OO-essentials.html 에서:

R의 세 가지 OO 시스템은 클래스와 방법을 정의하는 방식이 다릅니다.

  • S3는 범용 기능 OO라고 하는 OO 프로그래밍 스타일을 구현합니다.이는 메시지 전달 OO를 구현하는 Java, C++ 및 C#과 같은 대부분의 프로그래밍 언어와는 다릅니다.메시지 전달을 사용하면 메시지(메소드)가 개체로 전송되고 개체가 호출할 함수를 결정합니다.일반적으로 이 개체는 메서드 호출에 특별하게 나타나며, 보통 메서드/메시지 이름 앞에 나타납니다. 예를 들어 canvas.drawRect("파란색").S3는 다릅니다.계산이 여전히 메서드를 통해 수행되는 동안 일반 함수라고 하는 특수한 유형의 함수는 호출할 메서드를 결정합니다. 예를 들어, Rect(캔버스, "파란색")를 그립니다.S3는 매우 캐주얼한 시스템입니다.클래스에 대한 공식적인 정의는 없습니다.

  • S4는 S3와 유사하게 작동하지만 더 형식적입니다.S3에는 크게 두 가지 차이점이 있습니다.S4에는 각 클래스에 대한 표현과 상속을 설명하는 공식 클래스 정의가 있으며, 제네릭 및 메서드를 정의하는 특수 도우미 기능이 있습니다.S4에는 또한 다중 디스패치가 있습니다. 즉, 일반 함수는 하나가 아닌 임의의 수의 인수 클래스를 기반으로 메서드를 선택할 수 있습니다.

  • 줄여서 RC라고 하는 참조 클래스는 S3 및 S4와는 상당히 다릅니다. RC는 메시지 전달 OO를 구현하므로 메서드는 함수가 아닌 클래스에 속합니다.객체와 메서드를 구분하는 데 사용되므로 메서드 호출은 캔버스 $drawRect("파란색")처럼 보입니다.RC 객체는 또한 가변적입니다: 그들은 R의 일반적인 복사 온 수정 의미를 사용하지 않고 제자리에서 수정됩니다.이는 그들을 추론하기 어렵게 하지만, S3 또는 S4로 해결하기 어려운 문제를 해결할 수 있게 해줍니다.

OOO가 아닌 다른 시스템도 있습니다. 하지만 여기서 언급해야 할 중요한 것은 다음과 같습니다.

  • 기본 유형, 다른 OO 시스템의 기초가 되는 내부 C-수준 유형.기본 유형은 대부분 C 코드를 사용하여 조작되지만 다른 OO 시스템의 구성 요소를 제공하기 때문에 알아야 합니다.

저는 그 이름들이 어디서 유래했는지 궁금했던 것이 대부분이었습니다.이 위키백과 기사에서 그 이름은 R이 기반을 둔 S 프로그래밍 언어 버전을 가리키는 것으로 보입니다.다른 답변에 설명된 방법 파견 체계는 S에서 제공되며 버전에 따라 적절하게 레이블이 지정됩니다.

해라

methods(residuals)

여기에는 "dll.dll" 및 "dll.glm"이 나열됩니다., 선형 모형 즉을 선형 m 및 을 유 적 한 합residuals(m)residue은 .dll.dll이라고.일반화 선형 모형을 적합하면 redues.glm이 호출됩니다.이것은 일종의 C++ 객체 모델이 뒤집힌 것과 같습니다.C++에서 가상 함수가 있는 기본 클래스를 정의하고 파생 클래스는 클래스로 재정의됩니다.R에서 가상(일명 일반) 함수를 정의한 다음 이 함수를 재정의할 클래스를 결정합니다(일명 메서드 정의).이를 수행하는 클래스는 하나의 공통 슈퍼 클래스에서 파생될 필요가 없습니다.저는 일반적으로 S4보다 S3를 선호하는 것에 동의하지 않습니다.S4는 형식주의가 더 강하며(= 더 많은 타이핑) 일부 응용 프로그램에는 너무 과할 수 있습니다.그러나 S4 클래스는 C++에서 클래스 또는 구조체로 정의될 수 있습니다.다음과 같이 특정 클래스의 개체가 문자열과 두 개의 숫자로 구성되도록 지정할 수 있습니다.

setClass("myClass", representation(label = "character", x = "numeric", y = "numeric"))

해당 클래스의 개체와 함께 호출되는 메서드는 해당 멤버가 있는 개체에 의존할 수 있습니다.그것은 S3 수업과는 매우 다릅니다. S3 수업은 단지 많은 요소들의 목록일 뿐입니다.

, , S4, 에은멤함호출수로 멤버 .fun(object, args) 것도아에 의한 이 아닙니다.object$fun(args)만약 당신이 후자와 같은 것을 찾고 있다면, 프로토 패키지를 보세요.

여기에 웹 표현이 있는 해들리 위컴(Rstudio 수석 과학자)의 "고급 R, 2판"(CRC 프레스, 2019)에 따라 객체 지향 프로그래밍에 대한 장을 기반으로 업데이트된 R 객체 시스템의 빠른 런다운입니다.

Advanced R book cover

2015년 초판에는 여기에 웹 표현이 있고, 여기에 OO에 대한 해당 장이 있습니다.

OOO 시스템에 대한 접근 방식

Hadley는 OO 프로그래밍에 대한 두 가지 다른 접근 방식을 구별하기 위해 다음을 정의합니다.

기능 OOP: 메서드(호출 가능한 코드 조각)는 일반 함수에 속합니다(Java/C# 일반 메서드와 혼동하지 마십시오).메소드가 글로벌 룩업 테이블에 있다고 생각합니다.실행할 메서드는 함수 이름과 함수에 전달된 하나 이상의 인수 유형(또는 객체 클래스)을 기반으로 런타임 시스템에서 찾을 수 있습니다(이것을 "메소드 디스패치"라고 함).구문적으로 메서드 호출은 일반 함수 호출처럼 보일 수 있습니다.myfunc(object, arg1, arg2)이 호출을 통해 런타임은 쌍("myfunc", type of(object)" 또는 언어가 이를 지원하는 경우 type of(object), type of(arg1), type of(arg2)와 관련된 메서드를 찾습니다.R의 S3에서 일반 함수의 전체 이름은 (함수 이름, 클래스) 쌍을 제공합니다.예:mean.Date날짜의 평균을 계산하는 방법입니다. ㅠㅠmethods("mean")이 함수이름함께일방나법열다니합을인반적과▁function▁with▁name▁methods▁generic▁the▁to▁list다니나열합방으로 일반적인 메소드를 나열합니다.mean기능 OOP 접근 방식은 예를 들어 OOO의 선구자인 Smalltalk, Common Lisp Object System 및 Julia에서 찾아볼 수 있습니다.Hadley는 "R과 비교하여 Julia의 구현은 완전히 개발되었으며 매우 성능이 우수합니다."라고 말합니다.

캡슐화된 OOP: 메서드는 객체 또는 클래스에 속하며 메서드 호출은 일반적으로 다음과 같습니다.object.method(arg1, arg2)개체가 데이터(필드)와 동작(메소드)을 모두 캡슐화하기 때문에 이를 캡슐화라고 합니다.메소드는 개체에 연결된 룩업 테이블 또는 개체의 클래스 설명에 있는 것으로 간주합니다.런타임은 메서드 이름과 하나 이상의 인수 유형을 기준으로 메서드를 검색합니다.이것은 C++, Java, C#와 같은 "인기 있는" OOO 언어에서 볼 수 있는 접근 방식입니다.

두 경우 모두 상속이 지원되는 경우(아마 그럴 것입니다), 런타임은 콜 룩업 키와 일치하는 항목을 찾을 때까지 클래스 계층을 위쪽으로 이동할 수 있습니다.

R 객체가 어떤 시스템에 속하는지 알아내는 방법

library(sloop) # formerly, "pryr"
otype(mtcars)
#> [1] "S3"

R 객체 시스템

S3

  • 기능적 OOP 접근 방식.
  • 해들리에 따르면 가장 중요한 시스템입니다.
  • 가장 단순하고, 가장 일반적입니다.R에서 사용하는 최초의 OO 시스템.
  • 기본 R과 함께 제공되며 기본 R 전체에서 사용됩니다.
  • 강제 보증보다는 규약에 의존합니다.
  • Chambers, John M, Trevor J Hastie를 참조하십시오. 1992. "S. Wadsworth & Brooks/Cole Advanced Books & Software의 통계 모델"
  • 자세한 내용은 여기 "Advanced R, 2nd Edition" 참조하십시오.

S4

  • 기능적 OOP 접근 방식.
  • 해들리에 따르면 세 번째로 중요한 시스템입니다.
  • 따라서 S3를 다시 작성합니다. 따라서 S3와 비슷하지만 더 형식적이고 엄격합니다. 프로그램 설계에 대해 신중하게 생각하도록 합니다.대규모 시스템 구축(예: 바이오컨덕터 프로젝트)에 적합합니다.
  • 기본 "메소드" 패키지에 구현됩니다.
  • 참고: Chambers, John M. 1998. "데이터를 이용한 프로그래밍: S 언어 가이드" 스프링거.
  • 자세한 내용은 여기 "Advanced R, 2nd Edition" 참조하십시오.

RCaka "참조 클래스"

  • 캡슐화된 OOP 접근 방식입니다.
  • 기본 R과 함께 제공됩니다.
  • S4 기준.
  • RC 객체는 S4 객체의 특별한 유형으로, R의 일반적인 복사 온 수정 시맨틱을 사용하는 대신 내부에서 수정할 수 있습니다.가변 상태는 추론하기 어렵고 추악한 버그의 원인이지만 특정 응용 프로그램에서 더 효율적인 코드로 이어질 수 있습니다.

R6

  • 캡슐화된 OOP 접근 방식입니다.
  • 해들리에 따르면 두 번째로 중요한 시스템입니다.
  • R6 패키지에서 찾을 수 있습니다(와 함께 설치).library(R6))
  • RC와 비슷하지만 더 가볍고 훨씬 빠릅니다. S4나 메소드 패키지에 의존하지 않습니다.R 환경을 기반으로 구축됩니다.또한 다음이 있습니다.
    • 공과 사의 방법.
    • 활성 바인딩(액세스할 때 메소드를 실제로 호출하는 필드)
    • 패키지 간에 작동하는 클래스 상속
    • 클래스 메소드(클래스에 속하며 인스턴스에 액세스할 수 있는 코드)self,private,super) 및 멤버 함수(필드에 할당된 함수이지만 메소드가 아닌 함수만 할당됨)
  • R의 "복사-온-수정" 의미론에서 벗어날 수 있는 표준화된 방법을 제공합니다.
  • 패키지 사이트 "R6: 캡슐화된 객체 지향 프로그래밍 for R"을 참조하십시오.
  • 자세한 내용은 여기 "Advanced R, 2nd Edition" 참조하십시오.

다른이들

R.oo(RC와 유사), proto(프로토타입 기반, think JavaScript), Mutatr같은 다른 것들이 있습니다.그러나 "고급 R"은 다음과 같습니다.

널리 사용되는 R6 외에도 이러한 시스템은 주로 이론적인 관심사입니다.그들은 그들의 장점을 가지고 있지만, 그것들을 알고 이해하는 R 사용자는 거의 없기 때문에, 다른 사람들이 당신의 코드를 읽고 기여하는 것은 어렵습니다.

"고급 R, 2판"의 절충에 관한 장도 반드시 읽으십시오.

언급URL : https://stackoverflow.com/questions/6583265/what-does-s3-methods-mean-in-r

반응형