Potrebbe anche lasciare il gatto fuori dalla borsa e dire che ho cercato per circa un giorno di capire cosa sta succedendo quando chiamo plot
per un oggetto della classe SpatialPolygons*
. Il mio istinto è quello di cercare plot.SpatialPolygonsDataFrame
, l'approccio che funziona per qualsiasi numero di altri esempi che ho visto & incontrato, ma questo non è riuscito.Come dire quale metodo viene utilizzato da una chiamata di funzione quando `methods` fallisce?
esempio rapida:
US States .shp file qui.
library(maptools)
us.states<-readShapePoly("cb_2014_us_state_5m.shp")
plot(us.states)
Un po 'losca, ma qualsiasi altra cosa - il punto è che una semplice chiamata al plot
e da qualche parte in fondo R
sapevano quale metodo da chiamare per darci una rappresentazione di tutte le forme.
Dopo aver cercato un po 'intorno, ho provato due degli altri approcci suggeriti da vari SO Q & quanto, prima di tutto:
> methods(plot)
[1] plot.aareg* plot.acf*
[3] plot,ANY,ANY-method plot.cox.zph*
[5] plot.data.frame* plot.decomposed.ts*
[7] plot.default plot.dendrogram*
[9] plot.density* plot.ecdf
[11] plot.factor* plot.formula*
[13] plot.function plot.hclust*
[15] plot.histogram* plot.HoltWinters*
[17] plot.isoreg* plot.lm*
[19] plot.medpolish* plot.mlm*
[21] plot.ppr* plot.prcomp*
[23] plot.princomp* plot.profile.nls*
[25] plot.raster* plot.shingle*
[27] plot,SpatialGrid,missing-method plot,SpatialLines,missing-method
[29] plot,Spatial,missing-method plot,SpatialPixels,missing-method
[31] plot,SpatialPoints,missing-method plot,SpatialPolygons,missing-method
[33] plot.spec* plot.spline*
[35] plot.stepfun plot.stl*
[37] plot.survfit* plot.table*
[39] plot.times* plot.trellis*
[41] plot.ts plot.tskernel*
[43] plot.TukeyHSD* plot.xyVector*
[45] plot.zoo*
La risposta sembrerebbe essere in slot 27-32; tuttavia, ognuno è seguito da una virgola irritante! Non è stato detto che questo è possibile in ?methods
e ?plot,SpatialPolygons,missing-method
è un errore. Una rapida ricerca di missing-method
non restituisce nulla di utile e non c'è ancora alcuna menzione in ?methods
.
OK; andare avanti. Che mi dici di getS3method
? getMethod
? getMethods
? getAllMethods
??
> getS3method("plot","SpatialPolygonsDataFrame")
Error in getS3method("plot", "SpatialPolygonsDataFrame") :
S3 method 'plot.SpatialPolygonsDataFrame' not found
> getMethod("plot","SpatialPolygonsDataFrame")
Error in getMethod("plot", "SpatialPolygonsDataFrame") :
no method found for function 'plot' and signature SpatialPolygonsDataFrame
Gli ultimi due sono deprecato & anche restituire nulla.
Quindi a quanto pare queste funzioni sono solo una supposizione per il mio primo istinto.
Quindi, adesso? Come posso sapere quale metodo viene chiamato da plot
quando viene passato un SpatialPolygonsDataFrame
? C'è un approccio generale a questo problema che sostituisce l'approccio che ho usato sopra?
Edit:
sorta di per caso mi sono imbattuto su this (= ?`Spatial-Polygons-class`
) che dice:
The
plot
method for spatial polygons takes the following arguments:
ma ancora non dice che cosa che il metodo è, esattamente.
La "virgola irritante" ** ** è menzionato nella 'methods'?. Il secondo paragrafo nella sezione * Dettagli * dice: "Le firme del metodo S4 sono stampate come" metodo generico, di classe ", S4 consente la distribuzione multipla, quindi possono esserci più classi nella firma" generico, metodo A, B " . ". E come visualizzare la fonte dei metodi S4 è descritto nella risposta a [Come posso visualizzare il codice sorgente di una funzione?] (Http://stackoverflow.com/q/19226816/271616). –
Giusto per chiarire, la funzione 'methods' non ti ha mai detto quale metodo era in uso". Ti ha sempre detto solo quali metodi erano disponibili nei pacchetti caricati. –