我正在编写自己的R包,并希望绘制一个spatialPolygonsDataFrame
对象。如果我将其作为脚本编写,我只需使用maptools
加载必要的包(rgdal
,rgeos
和library()
)并使用plot(x)
绘图。
使用library()
is not advised编写要构建的程序包时,通常会通过将程序包添加到Imports:
中的NAMESPACE
来加载程序包。如果我这样做,我收到以下错误:
as.double(y)出错: 不能强制输入'S4'到'double'类型的矢量
如果编写脚本,则corrected by loading the maptools
package为library()
。
我知道您可以在ImportMethodsFrom
中使用NAMESPACE
加载单个方法,因此尝试使用此方法从maptools
导入绘图方法,但没有运气。当我查看NAMESPACE
包的maptools
时,我找不到导出的绘图方法。我看到有一个plot.Spatial
函数,我试图将其导入NAMESPACE
但没有成功:
请求的“maptools”中找不到任何方法:plot.Spatial
最后,我尝试在maptools
中将Depends:
添加到Imports:
而不是NAMESPACE
,这确实有效。这是规范的方式吗?为一种方法附加整个包装似乎有点过分(另外我不知道哪些功能被屏蔽了等等)。加载必要工具以在自己编写的函数中绘制地图的最佳方法是什么?
编辑1:在回答@ Hack-R的问题时,我不知道plot.Spatial是否是我需要的唯一方法,或者即使它是正确的方法。这是我有根据的猜测,这将使我能够绘制spatial
个对象。
答案 0 :(得分:5)
plot.Spatial
是内部,位于sp
而不是maptools,我认为这是答案。你正在看错了包裹。
正如评论中所讨论的,您只需使用sp::plot
即可。
为了开发一个软件包,还有更多内容。
如果您导入plot
的方法,以便您的功能可以在内部使用 ,但除非他们library(sp)
,否则用户无法使用它。您可以重新导出它,因此您的用户不必附加sp
- 但您需要记录它并解释原因,并检查是否存在问题附有sp。
这是一个具有挑战性的话题,在这里有很好的解释:http://r-pkgs.had.co.nz/namespace.html我对命名空间非常熟悉,但最近才意识到你可以重新导出从另一个导入的函数 - 所以你可以提供sp& #39; s plot.Spatial without Depends:sp。
我在我使用的包中覆盖了Spatial的打印方法,而这反过来覆盖了raster
提供的覆盖 - 没有阻止你这样做,它是一个问题管理用户期望,希望不要让事情变得困难。您可能不希望覆盖普通用途的plot
这样的通用名称,如果您有myPlot
专门执行此操作,或者添加自己的类,则可能会更清楚。
它的另一个级别很复杂,因为plot.Spatial
是内部,它的来源用于定义情节的S4方法。您可以使用showMethods("plot")
查看方法,然后获取提供findMethods("plot")[["Spatial#missing"]]
或findMethods("plot")[["SpatialPolygons#missing"]]
的方法的内部函数。
答案 1 :(得分:1)
@ mdsumner的回答指出了我正确的方向,并且本身就是一次有用的讨论。
我针对spatialPolygonsDataFrame
个对象绘制的具体问题的答案是将sp
添加到Imports:
并致电sp::plot()