R : 슬롯이란 무엇입니까?


79

R에 슬롯이 무엇인지 아는 사람이 있습니까?

나는 그 의미에 대한 설명을 찾지 못했습니다. 재귀 적 정의를 얻었습니다. "슬롯 함수는 객체의 개별 슬롯에 대한 정보를 반환하거나 설정합니다."

도움을 주시면 감사하겠습니다-Alley


이는 slot()기능 에 대한 도움말에서 가져온 것입니다. 슬롯이 무엇인지 문서화하는 것이 아니라 슬롯에 액세스하는 방법 만 설명합니다.
Gavin Simpson

답변:


87

슬롯은 S4 개체에 연결됩니다. 슬롯은 개체의 일부, 요소 또는 "속성"으로 볼 수 있습니다. 자동차 오브젝트가 있다고 가정하면 "가격", "도어 수", "엔진 유형", "마일리지"슬롯을 가질 수 있습니다.

내부적으로는 목록으로 표시됩니다. 예 :

setClass("Car",representation=representation(
   price = "numeric",
   numberDoors="numeric",
   typeEngine="character",
   mileage="numeric"
))
aCar <- new("Car",price=20000,numberDoors=4,typeEngine="V6",mileage=143)

> aCar
An object of class "Car"
Slot "price":
[1] 20000

Slot "numberDoors":
[1] 4

Slot "typeEngine":
[1] "V6"

Slot "mileage":
[1] 143

여기서 price, numberDoors, typeEngine 및 마일리지는 S4 클래스 "Car"의 슬롯입니다. 이것은 사소한 예입니다. 실제로 슬롯 자체는 다시 복잡한 객체가 될 수 있습니다.

슬롯은 다양한 방법으로 액세스 할 수 있습니다.

> aCar@price
[1] 20000
> slot(aCar,"typeEngine")
[1] "V6"    

또는 특정 방법의 구성을 통해 (추가 문서 참조).

S4 프로그래밍에 대한 자세한 내용은 이 질문을 참조하십시오 . 개념이 여전히 모호하게 들리면 객체 지향 프로그래밍의 일반적인 소개가 도움이 될 수 있습니다.

추신 : $명명 된 변수 / 요소에 액세스 하는 데 사용 하는 데이터 프레임 및 목록의 차이를 염두에 두십시오 .


3
+1 좋은 답변 Joris. 당신의 예를 추가 할 수 있습니다 slot(aCar, "price")연산이보고 된 ESP와 같은 단지 같은 다른 사용 slot()기능
개빈 심슨

감사합니다, 귀하의 답변은 매우 유용했습니다 !!
user573347

9
클래스의 모든 슬롯을 가져 오려면 getSlots(), 또는 slotNames()해당 이름이 있습니다.
Laurent

18

복잡한 변수의 액세스 가능한 names(variable)모든 $이름을 나열하는 것과 마찬가지로

slotNames(object) 개체의 모든 슬롯을 나열합니다.

보기의 즐거움을 위해 맞는 개체에 포함 된 장점을 발견하는 데 매우 편리합니다.


10

@Joris가 지적한 리소스와 자신의 답변 외에도 ?Classes슬롯에 다음 내용이 포함 된을 읽어보십시오 .

 Slots:

      The data contained in an object from an S4 class is defined
      by the _slots_ in the class definition.

      Each slot in an object is a component of the object; like
      components (that is, elements) of a list, these may be
      extracted and set, using the function ‘slot()’ or more often
      the operator ‘"@"’.  However, they differ from list
      components in important ways.  First, slots can only be
      referred to by name, not by position, and there is no partial
      matching of names as with list elements.
      ....

1

R이 모든 것을 재정의해야하는 이유를 모릅니다. 대부분의 일반적인 프로그래밍 언어는이를 "속성"또는 "속성"이라고합니다.


이것은 합법적 인 의견입니다. R이 기발한 디자인 선택으로 가득 차 있음을 인정합시다.
King Crimson

70 년대부터 시작된 기능에 대한 이상한 용어를 이해할 수 있지만 슬롯은 포함되지 않고 대부분의 OO 언어가 수십 년 뒤에 추가되었을 때 실제로 추가되었습니다.
Max
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.