2010-01-31 46 views
11

Làm thế nào tôi có thể xem định nghĩa của hàm S4? Ví dụ, tôi muốn xem định nghĩa của TSconnect trong gói TSdbi. LệnhKiểm tra phương pháp S4

showMethods("TSconnect") 

cho thấy rằng, trong số những hàm khác, hàm cho drv = "histQuoteDriver", dbname = "character".

Tôi làm cách nào để xem định nghĩa của hàm này? Nếu nó là một hàm S3, sẽ chỉ có đối số đầu tiên có thể xác định được (drv), có thể được kiểm tra bằng print (TSconnect.histQuoteDriver).

Sửa: Từ r-rèn tôi phát hiện ra đầu ra mong muốn:

setMethod("TSconnect", signature(drv="histQuoteDriver", dbname="character"), 
    definition= function(drv, dbname, user="", password="", host="", ...){ 
    # user/password/host for future consideration 
    if (is.null(dbname)) stop("dbname must be specified") 
    if (dbname == "yahoo") { 
     con <- try(url("http://quote.yahoo.com"), silent = TRUE) 
     if(inherits(con, "try-error")) 
     stop("Could not establish TShistQuoteConnection to ", dbname) 
     close(con) 
     } 
    else if (dbname == "oanda") { 
     con <- try(url("http://www.oanda.com"), silent = TRUE) 
     if(inherits(con, "try-error")) 
     stop("Could not establish TShistQuoteConnection to ", dbname) 
     close(con) 
     } 
    else 
     warning(dbname, "not recognized. Connection assumed working, but not tested.") 

    new("TShistQuoteConnection", drv="histQuote", dbname=dbname, hasVintages=FALSE, hasPanels=FALSE, 
     user = user, password = password, host = host) 
    }) 

Có cách nào để tra nghĩa này từ bên trong một phiên R?

+0

Bạn có thể tìm thấy http://stevencarlislewalker.wordpress.com/s3-s4-dictionary/ hữu ích. –

Trả lời

10

Lớp S4 tương đối phức tạp, vì vậy tôi sẽ đề xuất reading this introduction.

Trong trường hợp này, TSdbi là một ví dụ về lớp chung chung được mở rộng bởi tất cả các gói cơ sở dữ liệu cụ thể (ví dụ: TSMySQL, TSPostgreSQL, v.v.). Không có gì nhiều hơn với phương thức TSconnect() trong TSdbi so với những gì bạn thấy: drv = "character", dbname = "character" là các tham số cho hàm, chứ không phải các hàm trong và của chính chúng. Nếu bạn cài đặt một số gói cơ sở dữ liệu cụ thể và sử dụng showMethods ("TSconnect"), bạn sẽ thấy tất cả các trường hợp cụ thể của hàm đó. Nếu sau đó bạn gọi TSconnect() với một trình điều khiển cơ sở dữ liệu cụ thể, nó sẽ đi và sử dụng hàm thích hợp.

Đây cũng là cách chức năng như công việc tóm tắt. Ví dụ: hãy thử gọi số showMethods(summary). Tùy thuộc vào gói nào được tải, bạn sẽ thấy nhiều phương thức được trả về

Bạn có thể dễ dàng xem mã nguồn của nó trên R-Forge: http://r-forge.r-project.org/plugins/scmsvn/viewcvs.php/pkg/TSdbi/R/TSdbi.R?rev=70&root=tsdbi&view=markup. Đây là phạm vi của chức năng đó:

setGeneric("TSconnect", def= function(drv, dbname, ...) standardGeneric("TSconnect")) 

setMethod("TSconnect", signature(drv="character", dbname="character"), 
    definition=function(drv, dbname, ...) 
      TSconnect(dbDriver(drv), dbname=dbname, ...)) 
+1

Hướng dẫn S4 và liên kết đến kho lưu trữ giả mạo rất hữu ích. Tôi đã chỉnh sửa câu hỏi của mình để làm rõ hơn. –

+0

+1 cho liên kết. –

Các vấn đề liên quan