我正在编写自己的R包,并希望绘制一个spatialPolygonsDataFrame对象。如果我把它写成一个脚本,我只需用maptools、rgdal和rgeos加载必要的包( library() ),然后用plot(x)来绘图。
当使用library() 不建议编写要构建的包时,通常通过将其添加到NAMESPACE中的Imports:来加载包。如果我这样做,就会收到以下错误:
as.double(y)中的错误:不能强迫类型'S4‘到'double’类型的向量
如果编写脚本,这就是套餐和library()。
我知道您可以使用ImportMethodsFrom在NAMESPACE中加载各个方法,因此尝试使用这种方法从maptools导入一个绘图方法,但没有成功。当我查看NAMESPACE的maptools包时,我找不到导出的绘图方法。我看到了一个plot.Spatial函数,我尝试将它导入到NAMESPACE中,但没有成功:
在请求的“映射工具”中没有找到任何方法: plot.Spatial
最后,我尝试将maptools添加到Depends:中,而不是在Depends:中添加Imports:,这是可行的。这是典型的做法吗?为一种方法附加一个完整的包似乎太过分了(另外,我不知道什么函数被屏蔽了,等等)。在自编函数中加载必要的工具来绘制映射的最佳方法是什么?
编辑1:在回答@Hack的问题时,我不知道plot.Spatial是否是我唯一需要的方法,甚至是正确的方法。据我所知,这将使我能够绘制spatial对象。
发布于 2016-08-09 14:23:56
@mdsumner的回答为我指明了正确的方向,这本身就是一次有益的讨论。
对绘图spatialPolygonsDataFrame对象的特定查询的答案是将sp添加到Imports:并调用sp::plot()
发布于 2016-08-07 23:55:25
plot.Spatial是内部的,是在sp中的,而不是映射工具,我认为这才是答案。你看错了包裹。
正如注释中所讨论的,您可以简单地使用sp::plot。
对于开发一个包,还有更多的内容。
如果您导入plot的方法,以便您的函数可以在内部使用它,但是除非用户是library(sp),否则它是不可用的。您可以重新导出它,这样您的用户就不必附加sp --但是您需要记录它并解释原因,并且检查如果附加sp是否有任何问题。
这是一个很有挑战性的主题,在这里有很好的解释:http://r-pkgs.had.co.nz/namespace.html i对名称空间非常满意,但直到最近才意识到您可以重新导出从另一个函数导入的函数,这样就可以提供sp的plot.Spatial,而无需依赖:sp。
在我使用的包中,我重写了package的打印方法,然后重写了raster提供的重写--这并不能阻止您这样做,这是一个管理用户期望的问题,希望不会使事情变得很难/呃。为了正常使用,您可能不想覆盖像plot这样的泛型,如果您有一个专门这样做的myPlot,或者添加您自己的类,那就更清楚了。
不过,这是另一个复杂的层次,因为plot.Spatial是内部的,它的源代码用于为绘图定义S4方法。您可以看到showMethods("plot")的方法,然后获得提供findMethods("plot")[["Spatial#missing"]]或findMethods("plot")[["SpatialPolygons#missing"]]的内部函数。
https://stackoverflow.com/questions/38818682
复制相似问题