Осмотреть методы S4 - PullRequest
       16

Осмотреть методы S4

11 голосов
/ 31 января 2010

Как я могу посмотреть определение функции S4? Например, я хотел бы видеть определение TSconnect в пакете TSdbi. Команда

showMethods("TSconnect")

показывает, что среди прочих есть функция для drv = "histQuoteDriver", dbname = "character".

Как я могу увидеть определение этой функции? Если бы это была функция S3, был бы определен только первый аргумент (drv), который можно проверить с помощью print (TSconnect.histQuoteDriver).

Редактировать : Из r-forge я нашел желаемый результат:

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 ) 
   } )

Есть ли способ получить это определение из R-сессии?

1 Ответ

10 голосов
/ 31 января 2010

S4 классы относительно сложны, поэтому я бы предложил прочитать это введение .

В этом случае TSdbi является примером универсального класса S4, который расширяется всеми конкретными пакетами баз данных (например, TSMySQL, TSPostgreSQL и т. Д.). В TSdbi нет ничего больше метода TSconnect (), чем то, что вы видите: drv = "персонаж", dbname = "персонаж" - это параметры функции, а не функции сами по себе. Если вы установите некоторые из конкретных пакетов баз данных и используете showMethods («TSconnect»), вы увидите все конкретные экземпляры этой функции. Если затем вы вызываете TSconnect () с определенным драйвером базы данных, он пойдет и будет использовать соответствующую функцию.

Так работают такие функции, как сводка. Например, попробуйте позвонить showMethods(summary). В зависимости от того, какие пакеты загружены, вы должны увидеть несколько возвращенных методов

Вы можете легко увидеть исходный код для него в R-Forge: http://r -forge.r-project.org / plugins / scmsvn / viewcvs.php / pkg / TSdbi / R / TSdbi.R? оборотов = 70 & корень = tsdbi & вид = разметка . Это степень этой функции:

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

setMethod("TSconnect",   signature(drv="character", dbname="character"),
   definition=function(drv, dbname, ...)
             TSconnect(dbDriver(drv), dbname=dbname, ...))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...