2013-04-16 28 views
5

我想查看與某個對象類關聯的所有方法的列表。例如。如果我看到某個模型適合例程返回類「foo」的對象,我想知道該包(或任何其他包)是否已定義方法,如simulate.foo,update.foo,coef.foo,print.foo等。我該怎麼做這個?顯示與特定類相關聯的方法

我知道methods解決逆問題(假設S3級),但顯然我不想通過了爲了找出如果我的課感興趣有一個定義的print函數中的每個對象進行搜索。我可能在這裏忘記了一件很簡單的事情。謝謝!

(最好能看到S3和S4類的解決方案)。

更新:理想的解決方案應該揭示隱藏和方法,就像methods功能一樣。例如,methods("simulate")顯示:

> methods("simulate") 
[1] simulate.lm* 

所以在與lm類關聯的方法查詢,我們希望恢復這種模擬方法。

回答

6

我是不是一個笨蛋,或者是methods(class="foo")你想要的(對S3的方法)???

methods(class="lm") 
## [1] add1.lm*   alias.lm*   anova.lm   case.names.lm*  
## [5] confint.lm*  cooks.distance.lm* deviance.lm*  dfbeta.lm*   
## [9] dfbetas.lm*  drop1.lm*   dummy.coef.lm*  effects.lm*  
## [13] extractAIC.lm*  family.lm*   formula.lm*  hatvalues.lm  
## [17] influence.lm*  kappa.lm   labels.lm*   logLik.lm*   
## [21] model.frame.lm  model.matrix.lm nobs.lm*   plot.lm   
## [25] predict.lm   print.lm   proj.lm*   qr.lm*    
## [29] residuals.lm  rstandard.lm  rstudent.lm  simulate.lm*  
## [33] summary.lm   variable.names.lm* vcov.lm*   
## 
## Non-visible functions are asterisked 

showMethods作品S4類(來自@ JoshO'Brien採取現在刪除的答案,僅供參考):

library(sp) 
showMethods(classes="SpatialPolygons") 

## Function: [ (package base) 
## x="SpatialPolygons" 
## 
## Function: addAttrToGeom (package sp) 
## x="SpatialPolygons", y="data.frame" 
## 
## Function: coerce (package methods) 
## from="GridTopology", to="SpatialPolygons" 
## from="SpatialGrid", to="SpatialPolygons" 
## from="SpatialPixels", to="SpatialPolygons" 
## from="SpatialPolygons", to="SpatialLines" 
## from="SpatialPolygons", to="SpatialPolygonsDataFrame" 
## 
## Function: coordinates (package sp) 
## obj="SpatialPolygons" 
## 
## Function: coordnames (package sp) 
## x="SpatialPolygons" 
## 
## Function: coordnames<- (package sp) 
## x="SpatialPolygons", value="character" 
## 
## Function: over (package sp) 
## x="SpatialGrid", y="SpatialPolygons" 
## x="SpatialPoints", y="SpatialPolygons" 
## x="SpatialPolygons", y="SpatialGrid" 
## x="SpatialPolygons", y="SpatialGridDataFrame" 
## x="SpatialPolygons", y="SpatialPoints" 
## x="SpatialPolygons", y="SpatialPointsDataFrame" 
## 
## Function: overlay (package sp) 
## x="SpatialGridDataFrame", y="SpatialPolygons" 
## x="SpatialGrid", y="SpatialPolygons" 
## x="SpatialPointsDataFrame", y="SpatialPolygons" 
## x="SpatialPoints", y="SpatialPolygons" 
## x="SpatialPolygons", y="SpatialGrid" 
## x="SpatialPolygons", y="SpatialPoints" 
## 
## Function: plot (package graphics) 
## x="SpatialPolygons", y="missing" 
## 
## Function: polygons (package sp) 
## obj="SpatialPolygons" 
## 
## Function: polygons<- (package sp) 
## object="data.frame", value="SpatialPolygons" 
## 
## Function: recenter (package sp) 
## obj="SpatialPolygons" 
## 
## Function: spChFIDs (package sp) 
## obj="SpatialPolygons", x="character" 
## 
## Function: spsample (package sp) 
## x="SpatialPolygons" 
+0

你打我13秒:-) –

+0

嗯 - 有人被頭顱骨,但它不是你;-) –

+0

確實!我知道必須有一個內置的功能。 – cboettig

4

下面是使用.lm作爲內apropos一個正則表達式模式的示例,而不是用於.foo徒勞搜索:「LM」

> apropos("\\.lm") 
[1] "anova.lm"  "anova.lmlist" "hatvalues.lm" "kappa.lm"  "model.frame.lm" "model.matrix.lm" 
[7] "panel.lmline" "plot.lm"   "predict.lm"  "prepanel.lmline" "print.lm"  "residuals.lm" 
[13] "rstandard.lm" "rstudent.lm"  "summary.lm"  

也有首先方法所以你可能也想要那些:

> apropos("lm\\.") 
[1] ".__C__anova.glm.null" ".__C__glm.null"  "glm.control"   "glm.convert"   
[5] "glm.fit"    "glm.nb"    "lm.fit"    "lm.fit.qr.bare"  
[9] "lm.gls"    "lm.influence"   "lm.pfit"    "lm.ridge"    
[13] "lm.wfit"  

如果你想要忽略「glm」。方法使用有些更嚴格的正則表達式:

> apropos("^lm\\.") 
[1] "lm.fit"   "lm.fit.qr.bare" "lm.gls"   "lm.influence" "lm.pfit"  "lm.ridge"  
[7] "lm.wfit" 
+0

不幸的是,如果這個類沒有被導出到NAMESPACE中,它會失敗,例如當用「methods()」列出時,所有出現時帶有asterix *的方法。 – cboettig

2

對於S3的情況下,methods有一個參數class此:

> methods(class="lm") 
[1] add1.lm*   alias.lm*   anova.lm   case.names.lm*  
[5] confint.lm*  cooks.distance.lm* deviance.lm*  dfbeta.lm*   
[9] dfbetas.lm*  drop1.lm*   dummy.coef.lm*  effects.lm*  
[13] extractAIC.lm*  family.lm*   formula.lm*  hatvalues.lm  
[17] influence.lm*  kappa.lm   labels.lm*   logLik.lm*   
[21] model.frame.lm  model.matrix.lm nobs.lm*   plot.lm   
[25] predict.lm   print.lm   proj.lm*   qr.lm*    
[29] residuals.lm  rstandard.lm  rstudent.lm  simulate.lm*  
[33] summary.lm   variable.names.lm* vcov.lm* 
+0

以13秒擊敗你。 –

+0

是的,謝謝。我不太確定我是如何忘記這一點的,因爲我一定曾經用過它一百次...... –

相關問題