2012-01-01 43 views
43

Cho đối tượng R tùy ý, làm thế nào tôi có thể nhận được tất cả các phương thức liên kết với đối tượng?Nhận các phương thức đối tượng R

+2

Trong R, phương pháp có liên quan đến chức năng, không phải đối tượng. Bạn càng sớm nhận ra rằng các hệ thống OO của R sớm hơn sẽ bắt đầu có ý nghĩa. – hadley

+0

Nếu bạn google "tìm phương thức r", hai lần truy cập đầu tiên đưa bạn đến các tệp trang trợ giúp thích hợp. : P –

+0

@hadley nhưng không phải là tất cả các đối tượng chức năng? –

Trả lời

48

Gần nhất tôi có thể nghĩ là methods (nếu đối tượng/chức năng S3, List all available methods for an S3 generic function, or all methods for a class.) hoặc showMethods (nếu S4).

ví dụ .:

> A <- matrix(runif(10)) 
> B <- methods(class=class(A)) 
> B 
[1] anyDuplicated.matrix as.data.frame.matrix as.raster.matrix* 
[4] boxplot.matrix  determinant.matrix duplicated.matrix 
[7] edit.matrix*   head.matrix   isSymmetric.matrix 
[10] relist.matrix*  subset.matrix  summary.matrix  
[13] tail.matrix   unique.matrix  

    Non-visible functions are asterisked 
> attr(B,'info') 
        visible    from 
anyDuplicated.matrix TRUE  package:base 
as.data.frame.matrix TRUE  package:base 
as.raster.matrix  FALSE registered S3method 
boxplot.matrix   TRUE package:graphics 
determinant.matrix  TRUE  package:base 
duplicated.matrix  TRUE  package:base 
edit.matrix   FALSE registered S3method 
head.matrix    TRUE  package:utils 
isSymmetric.matrix  TRUE  package:base 
relist.matrix   FALSE registered S3method 
subset.matrix   TRUE  package:base 
summary.matrix   TRUE  package:base 
tail.matrix    TRUE  package:utils 
unique.matrix   TRUE  package:base 

Hoặc cho một chức năng:

> methods(summary) 
[1] summary.aov    summary.aovlist   summary.aspell*   
[4] summary.connection  summary.data.frame  summary.Date   
[7] summary.default   summary.ecdf*   summary.factor   
[10] summary.glm    summary.infl   summary.lm    
[13] summary.loess*   summary.manova   summary.matrix   
[16] summary.mlm    summary.nls*   summary.packageStatus* 
[19] summary.PDF_Dictionary* summary.PDF_Stream*  summary.POSIXct   
[22] summary.POSIXlt   summary.ppr*   summary.prcomp*   
[25] summary.princomp*  summary.srcfile   summary.srcref   
[28] summary.stepfun   summary.stl*   summary.table   
[31] summary.tukeysmooth* 

    Non-visible functions are asterisked 

?Methods cũng có thể chứng minh một đọc hữu ích.

12

Lớp của đối tượng R được khôi phục bằng class. Các đối tượng không có các phương thức liên kết với chúng theo cách nói R điển hình. Lớp của một đối tượng xác định những hàm-phương thức nào sẽ được áp dụng cho nó. Để xác định những hàm nào có các phương thức liên kết với một lớp đã cho, bạn sẽ cần phải kiểm tra tất cả các hàm sẵn có để xem liệu có một phương thức cụ thể theo lớp hay không. Thậm chí sau đó các hàm chung sẽ cố gắng sử dụng một phương thức "mặc định" trong hầu hết các trường hợp.

Một số phương pháp được liên kết với hàm S3 chung được hiển thị với methods. Các phương thức của hàm S4 được phục hồi với showMethods. Vì vậy, đối với những gì hầu hết mọi người sẽ gọi là "đối tượng", câu hỏi của bạn không có ý nghĩa, nhưng nếu nó xảy ra mà bạn đã bao gồm các chức năng theo thuật ngữ chung "đối tượng" (đó là công bằng về mặt kỹ thuật) thì tôi đã trả lời.

showMethods(classes="data.frame") 
methods(class="data.frame") 

Sau đó, có một nhóm các phương pháp có thể được gọi là "tiềm ẩn" mặc dù tên R của họ là "groupGeneric"

?groupGeneric 

methods("Math") # These are "add-on" methods to the primitive Math functions 
[1] Math.data.frame Math.Date  Math.dates*  Math.difftime Math.factor  
[6] Math.mChoice  Math.polynomial* Math.POSIXt  Math.ratetable* Math.Surv*  
[11] Math.times*  

    Non-visible functions are asterisked 
?"+" 

methods("Ops") # The binary operators such as "+", "-", "/" 
[1] Ops.data.frame  Ops.Date   Ops.dates*   Ops.difftime  Ops.factor   
[6] Ops.findFn   Ops.mChoice   Ops.numeric_version Ops.ordered   Ops.polynomial*  
[11] Ops.POSIXt   Ops.raster*   Ops.ratetable*  Ops.Surv*   Ops.times*   
[16] Ops.ts*    Ops.unit*   Ops.yearmon*  Ops.yearqtr*  Ops.zoo*   

    Non-visible functions are asterisked 

Và thậm chí sau đó bạn đã không thực sự hiển thị các thành viên của Math hay gia đình Ops, nhưng bạn sẽ thấy chúng ở trang trợ giúp cho? groupGeneric. Bạn không thấy Ops.numeric. Chế độ xem cấp thấp hơn được cung cấp bởi:

.Primitive("+") 
# function (e1, e2) .Primitive("+") 

Điều này sẽ gây ra lỗi nếu đưa ra đối số lớp sai.

1

Một số gói xác định các hàm không phải là phương thức nhưng vẫn được sử dụng cho một lớp cụ thể. Ví dụ, thư viện (igraph) định nghĩa hàm radius(_), được thiết kế để sử dụng trên các đối tượng trong lớp igraph. Vì các hàm như vậy không phải là phương thức, methods(_)showMethods(_) sẽ không hiển thị chúng.

Trong những trường hợp như vậy, lsf.str(_) có thể rất hữu ích. Ví dụ:

lsf.str("package:igraph") 

bao gồm các dòng:

radius : function (graph, mode = c("all", "out", "in", "total")) 
Các vấn đề liên quan