R: Slots là gì?


79

Có ai biết khe cắm trong R là gì không?

Tôi không tìm thấy lời giải thích về ý nghĩa của nó. Tôi nhận được một định nghĩa đệ quy: "Hàm vị trí trả về hoặc đặt thông tin về các vị trí riêng lẻ của một đối tượng"

Giúp đỡ sẽ được đánh giá cao, Cảm ơn - Alley


Đó là từ trợ giúp về slot()chức năng - nó không có nghĩa là ghi lại vị trí là gì, chỉ là cách truy cập chúng.
Gavin Simpson

Câu trả lời:


87

Các khe được liên kết với các đối tượng S4. Khe có thể được xem như một bộ phận, phần tử hoặc một "thuộc tính" của một đối tượng. Giả sử bạn có một đối tượng ô tô, sau đó bạn có thể có các vị trí "giá", "số cửa", "loại động cơ", "số dặm".

Trong nội bộ, đó là một danh sách. Một ví dụ :

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

Ở đây, giá cả, số Nhà, loại Xe và quãng đường đi được là các vị trí của "Xe" hạng S4. Đây là một ví dụ đơn giản, trong thực tế, bản thân các khe cắm có thể là các đối tượng phức tạp.

Các khe có thể được truy cập theo nhiều cách:

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

hoặc thông qua việc xây dựng một phương pháp cụ thể (xem tài liệu bổ sung).

Để biết thêm về lập trình S4, hãy xem câu hỏi này . Nếu khái niệm này vẫn còn mơ hồ đối với bạn, phần giới thiệu chung về Lập trình hướng đối tượng có thể giúp ích cho bạn.

Tái bút: Lưu ý sự khác biệt với khung dữ liệu và danh sách, nơi bạn sử dụng $để truy cập các biến / phần tử được đặt tên.


3
+1 câu trả lời hay đó Joris. Bạn có thể muốn thêm một ví dụ về slot(aCar, "price")cũng giống như sử dụng khác, đặc biệt là các op đã nhìn vào slot()chức năng
Gavin Simpson

Cảm ơn, câu trả lời của bạn rất hữu ích !!
user573347

9
Và để có được tất cả các vị trí của một lớp, có getSlots(), hoặc slotNames()cho tên của chúng.
Laurent

18

Cũng giống như names(variable)liệt kê tất cả các $tên-có thể truy cập của một biến phức tạp,

slotNames(object) liệt kê tất cả các khe của một đối tượng.

Rất tiện dụng để khám phá xem đối tượng vừa vặn của bạn có những gì để bạn thỏa sức xem.


10

Ngoài các tài nguyên mà @Joris chỉ cho bạn, cùng với câu trả lời của riêng anh ấy, hãy thử đọc ?Classes, bao gồm những điều sau đây về các vị trí:

 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

Không hiểu tại sao R phải xác định lại mọi thứ. Hầu hết các ngôn ngữ lập trình thông thường gọi chúng là "thuộc tính" hoặc "thuộc tính".


Đây là một nhận xét chính đáng. Hãy thừa nhận rằng R có đầy những lựa chọn thiết kế kỳ quặc.
King Crimson

Tôi có thể hiểu những thuật ngữ kỳ lạ cho các tính năng có từ những năm 70, nhưng các khe cắm không nằm trong số đó, chúng thực sự được thêm vào khi hầu hết các ngôn ngữ OO đã đi sau hàng chục năm.
Tối đa
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.