2015-01-13 3 views
13

변수가 어떤 클래스에서 상속되는지 확인하려면 is 또는 inherits을 사용할 수 있습니다.상속인과 상속인의 차이점은 무엇입니까?

class(letters) 
## [1] "character" 
is(letters, "character") 
## [1] TRUE 
inherits(letters, "character") 
## [1] TRUE 

내가 사용해야하는 설정이 있으며, 다른 값을 반환합니까?

+0

'r-faq' 태그는이 태그에 표시하지 않으시겠습니까? –

답변

9

짧은 버전 :

사용 inherits하지만 숫자와 S4 클래스에주의.


긴 버전 :

상속은 S4와 비 S4 객체, 모두,하는 것입니다 거의 항상 동일합니다 다음 is 도움말 페이지의 관련 항목 섹션에서

다소 빠릅니다. 비 동등성은 조건부 수퍼 클래스가있는 클래스에 적용됩니다 (일반적이지는 않으나 권장하지 않음) : 관계에 대한 테스트이지만 정의에 따라 상속됨에 따라 조건부 S4에 대한 상속이 무시됩니다. 사물. inherits 도움말 페이지의 공식 클래스 섹션에서

: 공식 클래스

상속의 아날로그은입니다. 두 함수는 한 가지 예외가있는 것처럼 일관되게 동작합니다. S4 클래스는 명시 적 테스트를 통해 조건부 상속을 가질 수 있습니다. 이 경우 이 조건을 테스트하지만 모든 조건부 수퍼 클래스를 상속합니다.

그래서 대부분 같은 것을 반환하지만, inherits이 더 빠르므로 대부분의 경우 기본 선택 항목이어야합니다. 조건부 상속 S4 클래스를 사용하는 경우

값이 다를 수있다 (콘라드 언급 된 바와 같이, is도. methods 패키지 Rscript 성능 민감한 용도에 부적합 할 수있는로드되어 있어야)하지만이다 not recommended ("방법 선택 및 발송 : 세부 정보"섹션 참조) 이는 희망 사항이 아님을 의미합니다.

정수가 숫자인지 확인하는 가장 두드러진 기능이 있습니다.

class(1L) 
## [1] "integer" 
is.numeric(1L) 
## [1] TRUE 
is(1L, "numeric") 
## [1] TRUE 
inherits(1L, "numeric") 
## [1] FALSE 
+0

좋아요, ** 정수가 "상속"하지 않는 이유는 무엇입니까? ** float은 다음과 같이 설명합니다 : Rgames> class (1.4) [1] "numeric" Rgames> is.numeric (1.4) [1] TRUE Rgames> inherits (1.4, 'numeric') [1] TRUE Rgames>는 (1.4, 숫자) [1] TRUE –

+2

숫자 개체가 * 암시 적이라는 사실과 관련이 있다고 생각합니다. * class only :'? class'에서'객체가 class 속성을 가지고 있지 않으면 암시 적 클래스, 'matrix' ','array ''또는 'mode (x)'의 결과를 제외하고는 (except 그 정수 벡터는 암시적인 클래스 ' "정수"'를 가짐).)'is'는 암시적인 클래스를보고'상속 '은 ...? –

+0

나는 이것을 "무능함"이라고 부르는 하이 -R 주체들의 의견을 지나치는 것을 기억한다. –