【发布时间】:2015-11-29 23:46:05
【问题描述】:
还不如让猫从袋子里出来,说我已经尝试了大约一天来弄清楚当我为 SpatialPolygons* 类的对象调用 plot 时发生了什么。我的直觉是寻找plot.SpatialPolygonsDataFrame,这种方法适用于我见过和遇到的任何其他示例,但都失败了。
快速示例:
US States .shp file 在这里。
library(maptools)
us.states<-readShapePoly("cb_2014_us_state_5m.shp")
plot(us.states)
有点笨拙,但不管怎样——关键是对plot 和深层R 的简单调用就知道调用哪个方法来为我们提供所有形状的表示。
经过一番搜索,我尝试了各种 SO Q&As 建议的其他两种方法,首先是:
> 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*
答案似乎在插槽 27-32;然而,每一个后面都有一个令人烦恼的逗号!没有提到这在?methods 中是可能的,?plot,SpatialPolygons,missing-method 是一个错误。快速搜索missing-method 没有任何用处,?methods 中也没有提及。
好的;继续。 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
后两者已被弃用,也不返回任何内容。
显然,这些功能只是我第一直觉的替代品。
那么现在呢?当传递SpatialPolygonsDataFrame 时,如何判断plot 正在调用哪个方法?是否有任何通用方法可以替代我上面使用的方法来解决这个问题?
编辑:
我偶然发现了this (=?`Spatial-Polygons-class` ),上面写着:
空间多边形的
plot方法采用以下参数:
但它仍然没有确切说明该方法是什么。
【问题讨论】:
-
?methods中提到了“烦人的逗号”。 Details 部分的第二段说,“S4 方法签名打印为 'generic,class-method';S4 允许多次分派,因此签名中可能有多个类 'generic,A ,B-方法'。”。以及如何查看 S4 方法的源代码在How can I view the source code for a function?的回答中有所描述。 -
澄清一下,
methods函数从未“告诉你使用了哪种方法”。它只告诉你加载的包中有哪些方法可用。