r - 当 `methods` 失败时,如何判断函数调用正在使用什么方法?

标签 r oop methods maptools

还不如让猫从袋子里出来,说我已经尝试了大约一天来弄清楚当我调用 plot 时发生了什么对于 SpatialPolygons* 类的对象.我的直觉是寻找 plot.SpatialPolygonsDataFrame ,该方法适用于我见过和遇到的任何数量的其他示例,但这失败了。
快速示例:
US States .shp file这里。

library(maptools)
us.states<-readShapePoly("cb_2014_us_state_5m.shp")
plot(us.states)
A sample plot. It shows the polygons of all the US states and territories placed on an invisible globe. It's hard to read, but the plot is not the main thing for this question.
有点笨拙,但无论如何——关键是对 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
后两者已被弃用并且也不返回任何内容。
显然,这些功能只是我第一直觉的替代品。
那么现在怎么办?如何判断 plot 正在调用哪个方法?当它通过 SpatialPolygonsDataFrame ?是否有任何通用方法可以取代我上面使用的方法来解决这个问题?
编辑:
我偶然发现了this (= ?`Spatial-Polygons-class` ) 说:

The plot method for spatial polygons takes the following arguments:


但它仍然没有确切地说该方法是什么。

最佳答案

部分答案:方法是sp:::plot.SpatialPolygons .我不知道为什么这些逗号会出现在 methods(plot) 的结果中; plot,SpatialPolygons,missing-method对我来说毫无意义(我也看到了)。

我通过导致错误找到了答案。我没有你的形状文件,所以我从 help("SpatialPolygonsDataFrame-class") 中获取示例,我从 ?SpatialPolygons" 得到.示例如下:

Sr1 = Polygon(cbind(c(2,4,4,1,2),c(2,3,5,4,2)))
Sr2 = Polygon(cbind(c(5,4,2,5),c(2,3,2,2)))
Sr3 = Polygon(cbind(c(4,4,5,10,4),c(5,3,2,5,5)))
Sr4 = Polygon(cbind(c(5,6,6,5,5),c(4,4,3,3,4)), hole = TRUE)
Srs1 = Polygons(list(Sr1), "s1")
Srs2 = Polygons(list(Sr2), "s2")
Srs3 = Polygons(list(Sr3, Sr4), "s3/4")
SpP = SpatialPolygons(list(Srs1,Srs2,Srs3), 1:3)
plot(SpP, col = 1:3, pbg="white")

然后我更改了绘图调用以给出错误:
plot(SpP, col = kasjdhfkjasdfhkas, pbg = "white")
# Error in plot.SpatialPolygons(x, ...) : object 'kasjdhfkjasdfhkas' not found

(除非您在工作区中将 kasjdhfkjasdfhkas 定义为向量,否则应该可以使用)。果然,
sp:::plot.SpatialPolygons

显示了该方法的代码。

关于r - 当 `methods` 失败时,如何判断函数调用正在使用什么方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32387521/

相关文章:

r - 情节内情节

r - 带有值的热图(ggplot2)——如何使单元格成为正方形并自动调整大小?

r - Group_by 表示 R 中的多列

Java - 不使用直接字段名称访问对象的属性

java - 从类继承并在新类中更改其父类

php - 使用接口(interface)实现开闭原则(SOLID)

java - 通过Java中的方法传递变量

r - `dist`中的 `st_buffer`参数默认设置为什么单位?

c# - 'Class' 不包含 'Method' 的定义

java - 如何在方法调用中传递数据并使用用户输入