R có 'công đoàn lớp', vì vậy
setOldClass("data.frame")
setClassUnion("data.frameORvector", c("data.frame", "vector"))
Lớp data.frameORvector
là ảo, vì vậy không thể được khởi tạo nhưng có thể được sử dụng trong các khe khác (representation=
), như là một lớp chứa (contains=
), và cho công văn
A = setClass("A",
representation=representation(x="data.frameORvector"))
> A(x=1:3)
An object of class "A"
Slot "x":
[1] 1 2 3
> A(x=data.frame(x=1:3, y=3:1))
An object of class "A"
Slot "x":
x y
1 1 3
2 2 2
3 3 1
Phương pháp có thể khó thực hiện bởi vì tất cả những gì bạn biết là vị trí chứa một trong các loại cha mẹ của công đoàn.
setGeneric("hasa", function(object) standardGeneric("hasa"))
setMethod("hasa", "data.frameORvector", function(object) typeof([email protected]))
> hasa(A(x=1:5))
[1] "integer"
> hasa(A(x=data.frame(y=1:5)))
[1] "list"
Tôi thực sự tìm thấy tài liệu trên ?Classes
, ?Methods
, ?setClass
, và bạn bè giúp đỡ. Hadley Wickham có một số tutorial (ví dụ trên trang này không mạnh lắm, tức là Person
, trong khi khái niệm sẽ viết People
để khai thác điểm mạnh vector hóa của R) và có một phần trong Bioconductor course gần đây này. Tôi không nghĩ đến việc đi sâu vào chi tiết về công đoàn.
Nguồn
2012-10-22 00:17:19
Những thứ có khe là lớp S4. – Spacedman
Không chỉ vậy, mọi thứ bạn trình bày đều liên quan đến cơ chế phương pháp S4. –
Vâng, tệ của tôi. Sai số. –