2011-01-17 33 views
64

Có ai biết một khe trong R không?R: Slots là gì?

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: "Khe cắm trở về chức năng hoặc thiết lập thông tin về vị trí riêng lẻ của một đối tượng"

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

+0

Đó là từ sự trợ giúp về hàm 'slot()' - nó không có nghĩa là ghi lại một khe là gì, chỉ cách truy cập chúng. –

Trả lời

66

Slots có liên quan đến đối tượng S4. Một khe có thể được xem như là một 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 khe "giá", "số cửa", "loại động cơ", "số dặm".

Nội bộ, được thể hiện 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ả, numberDoors, typeEngine và mileage là khe của lớp S4 "Car". Đây là một ví dụ tầm thường, trong các khe thực tế, bản thân chúng có thể là một đối tượng phức tạp.

Slots có thể được truy cập trong nhiều cách:

> [email protected] 
[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 thêm tài liệu).

Để biết thêm về chương trình S4, hãy xem this question. Nếu khái niệm vẫn còn âm thanh mơ hồ với bạn, một giới thiệu chung trong lập trình hướng đối tượng có thể giúp đỡ.

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

+2

+1 câu trả lời hay đấy Joris. Bạn có thể muốn thêm một ví dụ về 'slot (aCar," price ")' giống như một cách dùng khác, đặc biệt là op đã nhìn vào hàm 'slot()' –

+0

Ý tưởng hay, Gavin, sẽ làm. –

+0

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

10

Ngoài các nguồn lực @Joris điểm bạn, cộng với câu trả lời của mình, hãy thử đọc ?Classes, trong đó bao gồm những điều sau đây trên khe:

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. 
     .... 
15

Cũng như names(variable) danh sách tất cả các $ tên -accessible của một biến phức tạp, vì vậy quá

slotNames(object) liệt kê tất cả các vị trí của đối tượng.

Rất tiện dụng để khám phá những gì goodies đối tượng phù hợp của bạn chứa cho niềm vui xem của bạn.