首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自创作包:用于spatialPolygonsDataFrame的加载绘图方法

自创作包:用于spatialPolygonsDataFrame的加载绘图方法
EN

Stack Overflow用户
提问于 2016-08-07 21:21:10
回答 2查看 166关注 0票数 1

我正在编写自己的R包,并希望绘制一个spatialPolygonsDataFrame对象。如果我把它写成一个脚本,我只需用maptoolsrgdalrgeos加载必要的包( library() ),然后用plot(x)来绘图。

当使用library() 不建议编写要构建的包时,通常通过将其添加到NAMESPACE中的Imports:来加载包。如果我这样做,就会收到以下错误:

as.double(y)中的错误:不能强迫类型'S4‘到'double’类型的向量

如果编写脚本,这就是套餐library()

我知道您可以使用ImportMethodsFromNAMESPACE中加载各个方法,因此尝试使用这种方法从maptools导入一个绘图方法,但没有成功。当我查看NAMESPACEmaptools包时,我找不到导出的绘图方法。我看到了一个plot.Spatial函数,我尝试将它导入到NAMESPACE中,但没有成功:

在请求的“映射工具”中没有找到任何方法: plot.Spatial

最后,我尝试将maptools添加到Depends:中,而不是在Depends:中添加Imports:,这是可行的。这是典型的做法吗?为一种方法附加一个完整的包似乎太过分了(另外,我不知道什么函数被屏蔽了,等等)。在自编函数中加载必要的工具来绘制映射的最佳方法是什么?

编辑1:在回答@Hack的问题时,我不知道plot.Spatial是否是我唯一需要的方法,甚至是正确的方法。据我所知,这将使我能够绘制spatial对象。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-09 14:23:56

@mdsumner的回答为我指明了正确的方向,这本身就是一次有益的讨论。

对绘图spatialPolygonsDataFrame对象的特定查询的答案是将sp添加到Imports:并调用sp::plot()

票数 1
EN

Stack Overflow用户

发布于 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"]]的内部函数。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38818682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档