11

S4関数の定義を表示するにはどうすればよいですか?たとえば、パッケージTSdbiでTSconnectの定義を確認したいと思います。コマンド

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セッション内からこの定義を取得する方法はありますか?

4

1 に答える 1

10

S4クラスは比較的複雑なので、この紹介を読むことをお勧めします。

この場合、TSdbiは、すべての特定のデータベースパッケージ(TSMySQL、TSPostgreSQLなど)によって拡張される汎用S4クラスの例です。TSdbiのTSconnect()メソッドには、表示されているもの以外に何もありません。drv= "character"、dbname = "character"は関数のパラメーターであり、関数自体ではありません。特定のデータベースパッケージのいくつかをインストールしてshowMethods( "TSconnect")を使用すると、その関数の特定のインスタンスがすべて表示されます。次に、特定のデータベースドライバを使用してTSconnect()を呼び出すと、適切な関数が使用されます。

これは、要約などの機能もどのように機能するかです。たとえば、を呼び出してみてくださいshowMethods(summary)。ロードされているパッケージに応じて、複数のメソッドが返されるはずです

R-Forgeでそのソースコードを簡単に確認できます:http://r-forge.r-project.org/plugins/scmsvn/viewcvs.php/pkg/TSdbi/R/TSdbi.R ?rev = 70&root = tsdbi&view=markup。これはその関数の範囲です:

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

setMethod("TSconnect",   signature(drv="character", dbname="character"),
   definition=function(drv, dbname, ...)
             TSconnect(dbDriver(drv), dbname=dbname, ...))
于 2010-01-31T18:05:29.947 に答える