이름에 담긴 의미는?
S3는 엄격한 이름 규칙을 사용해요. 모든 S3 메서드는 generic.class 형태의 이름을 가져요.
하지만 그 역은 성립하지 않아요. 점(.)이 들어간 이름이라고 해서 S3 메서드인 것은 아니에요. 이는 S 언어 초창기부터 존재하던 많은 함수에서 볼 수 있는 현상이에요. 예를 들어 all.equal()(docs)은 실제로 메서드가 아니라 S3 제네릭이에요. (이런 점에서 leopard.case 표기법은 혼란을 줄 수 있어요.)
어떤 함수가 S3 제네릭인지 확인하려면 pryr 패키지의 is_s3_generic()(docs)을 호출하면 돼요. 콘솔에 함수 이름을 입력해 출력해 보고, 그 안에서 UseMethod()를 호출하는지도 확인할 수 있어요.
비슷하게, 함수가 S3 메서드인지 확인하려면 pryr의 is_s3_method()(docs)를 호출하면 돼요. 예를 들어,
library(pryr)
is_s3_generic("t") # 전치(Transpose)용 제네릭 함수
is_s3_method("t.data.frame") # data.frame 전치 메서드
is_s3_method("t.test") # Student의 t-검정 함수
다음 중 옳은 설명은 무엇인가요?
이 연습은 강의의 일부입니다
