2016-10-05 5 views
4

특정 패키지 (네임 스페이스 환경을 통해 제공)에서 구현 된 모든 S4 메소드를 쿼리하는 방법을 찾고 있습니다. 나는 .__T__으로 시작하는 모든 객체를 열거 할 수 있다고 생각하지만, 문서화 된 방식과 덜 익숙한 방식을 선호합니다.패키지에서 구현 한 모든 S4 메서드를 열거하는 방법은 무엇입니까?

showMethods(where=asNamespace("RSQLite")) 

출력은 다음과 같습니다 :

Function: dbBegin (package DBI) 
conn="SQLiteConnection" 

Function: dbBeginTransaction (package RSQLite) 
conn="ANY" 

Function: dbClearResult (package DBI) 
res="SQLiteConnection" 
res="SQLiteResult" 

Function: dbColumnInfo (package DBI) 
res="SQLiteResult" 

를이 더 많은 행을 계속

> ls(asNamespace("RSQLite"), all.names = TRUE, pattern = "^[.]__T__") 
[1] ".__T__dbBegin:DBI"     ".__T__dbBeginTransaction:RSQLite" 
[3] ".__T__dbBind:DBI"     ".__T__dbClearResult:DBI"   
[5] ".__T__dbColumnInfo:DBI"   ".__T__dbCommit:DBI"    
[7] ".__T__dbConnect:DBI"    ".__T__dbDataType:DBI"    
[9] ".__T__dbDisconnect:DBI"   ".__T__dbExistsTable:DBI"   
[11] ".__T__dbFetch:DBI"     ".__T__dbGetException:DBI"   
[13] ".__T__dbGetInfo:DBI"    ".__T__dbGetPreparedQuery:RSQLite" 
[15] ".__T__dbGetQuery:DBI"    ".__T__dbGetRowCount:DBI"   
[17] ".__T__dbGetRowsAffected:DBI"  ".__T__dbGetStatement:DBI"   
[19] ".__T__dbHasCompleted:DBI"   ".__T__dbIsValid:DBI"    
[21] ".__T__dbListFields:DBI"   ".__T__dbListResults:DBI"   
[23] ".__T__dbListTables:DBI"   ".__T__dbReadTable:DBI"    
[25] ".__T__dbRemoveTable:DBI"   ".__T__dbRollback:DBI"    
[27] ".__T__dbSendPreparedQuery:RSQLite" ".__T__dbSendQuery:DBI"    
[29] ".__T__dbUnloadDriver:DBI"   ".__T__dbWriteTable:DBI"   
[31] ".__T__fetch:DBI"     ".__T__isSQLKeyword:DBI"   
[33] ".__T__make.db.names:DBI"   ".__T__show:methods"    
[35] ".__T__sqlData:DBI"     ".__T__SQLKeywords:DBI"    

답변

2

showMethods가 메서드에서 사용할 수있는 유일한 방법이라고 생각하지만 실제로는 함수를 개체로 반환하지 않고 화면에 출력합니다.

다음은 환경에 정의 된 메소드의 목록을 리턴합니다. 적용 범위를 추적하기 위해 패키지의 모든 메소드를 수정하는 데 사용되는 covr::replacements_S4()에서 수정되었습니다.

S4_methods <- function(env) { 
    generics <- methods::getGenerics(env) 

    res <- Map([email protected], [email protected], USE.NAMES = FALSE, 
    f = function(name, package) { 
     what <- methods::methodsPackageMetaName("T", paste(name, package, sep = ":")) 

     table <- get(what, envir = env) 

     mget(ls(table, all.names = TRUE), envir = table) 
    }) 
    res[lengths(res) > 0] 
} 

m <- S4_methods(asNamespace("DBI")) 
length(m) 
#> [1] 21 
m[1:3] 
#> [[1]] 
#> [[1]]$DBIObject 
#> function(dbObj, obj, ...) { 
#> dbiDataType(obj) 
#> } 
#> <environment: namespace:DBI> 
#> attr(,"target") 
#> An object of class "signature" 
#>  dbObj 
#> "DBIObject" 
#> attr(,"defined") 
#> An object of class "signature" 
#>  dbObj 
#> "DBIObject" 
#> attr(,"generic") 
#> [1] "dbDataType" 
#> attr(,"generic")attr(,"package") 
#> [1] "DBI" 
#> attr(,"class") 
#> [1] "MethodDefinition" 
#> attr(,"class")attr(,"package") 
#> [1] "methods" 
#> 
#> 
#> [[2]] 
#> [[2]]$character 
#> function(drvName, ...) { 
#>  findDriver(drvName)(...) 
#> } 
#> <environment: namespace:DBI> 
#> attr(,"target") 
#> An object of class "signature" 
#>  drvName 
#> "character" 
#> attr(,"defined") 
#> An object of class "signature" 
#>  drvName 
#> "character" 
#> attr(,"generic") 
#> [1] "dbDriver" 
#> attr(,"generic")attr(,"package") 
#> [1] "DBI" 
#> attr(,"class") 
#> [1] "MethodDefinition" 
#> attr(,"class")attr(,"package") 
#> [1] "methods" 
#> 
#> 
#> [[3]] 
#> [[3]]$`DBIConnection#character` 
#> function(conn, statement, ...) { 
#>  rs <- dbSendStatement(conn, statement, ...) 
#>  on.exit(dbClearResult(rs)) 
#>  dbGetRowsAffected(rs) 
#> } 
#> <environment: namespace:DBI> 
#> attr(,"target") 
#> An object of class "signature" 
#>   conn  statement 
#> "DBIConnection"  "character" 
#> attr(,"defined") 
#> An object of class "signature" 
#>   conn  statement 
#> "DBIConnection"  "character" 
#> attr(,"generic") 
#> [1] "dbExecute" 
#> attr(,"generic")attr(,"package") 
#> [1] "DBI" 
#> attr(,"class") 
#> [1] "MethodDefinition" 
#> attr(,"class")attr(,"package") 
#> [1] "methods" 
2

나는 당신이 같이 showMethods 기능을 원하는 생각합니다. ?showMethods에는 결과를 맞추기위한 몇 가지 추가 인수가 있습니다.