【问题标题】:Error with importShapefile with PBSmapping package in RR中带有PBSmapping包的importShapefile错误
【发布时间】:2013-03-01 19:26:40
【问题描述】:

我在运行 R 版本 2.15.2,平台:i386-w64-mingw32/i386(32 位)的 RStudio (0.97.318) 中的 PBSmapping(版本 2.63.37)中收到零星的错误消息。我在运行以前版本的 R 和 RStudio 时也收到了错误。

> ST6 = importShapefile("Data/pvi_stat_2002_utm.shp", projection="UTM", readDBF = TRUE)
Error in 1:nrow(dbf) : argument of length 0

> traceback()
2: cbind(1:nrow(dbf), dbf)
1: importShapefile("Data/pvi_stat_2002_utm.shp", projection = "UTM",readDBF = TRUE)

我只是偶尔收到此错误 - 可能每 10 次运行代码就有 1 次。但是一旦在会话中发生错误,它就会重复发生并且直到我完全关闭R并重新打开它之后才能成功执行命令。有一次我不得不重新启动计算机才能工作,因为连续重新打开 R 并没有帮助。

我认为这可能是内存问题,但有时当工作区中没有对象时我会收到错误消息。即使我加载了大对象,通常代码也能正常运行。为了响应该错误,我已从工作区中删除了所有对象,甚至还使用了 gc(),但无济于事。

这是我收到错误的唯一 shapefile,但由于它是我唯一经常使用的 shapefile,而且由于我无法预测错误何时发生,因此我对其他 shapefile 的努力尚无定论。不确定将 shapefile 上传到 Stack Overflow。压缩文件大约 9MB。

【问题讨论】:

  • 一个经典案例,你应该使用 seq_len(nrow(dbf)) 而不是 1:nrow(dbf)
  • 尝试 importShapefile("..shp", projection="UTM", readDBF = FALSE) 可能会避免直接错误并获得几何图形。 rgdal 还读取 shapefile 和 maptools,rgdal 为您提供投影元数据(如果存在),而 maptools 不能(因为它无法从 .prj 中的 WKT 转换为 PROJ.4)。

标签: r gis shapefile polygons


【解决方案1】:

我正在使用 R-3.0.1 和 PBS Mapping 2.66.53 以及来自http://www.nafo.int/about/overview/gis/Divisions.zip 的 NAVO Divisions shapefile。在 Windows 7 x86_64 和 OS X Snow Leopard(使用为 x86_64 构建的 macports R)上,.dbf 被正确读取,但它 有时使用 RHEL 5.9 会失败:

> library("PBSmapping", lib.loc="/home/gwhite/R/x86_64-unknown-linux-gnu-library/3.0")

-----------------------------------------------------------
PBS Mapping 2.66.53 -- Copyright (C) 2003-2013 Fisheries and Oceans Canada

[...]
-----------------------------------------------------------

> library("rgeos", lib.loc="/home/gwhite/R/x86_64-unknown-linux-gnu-library/3.0")
 rgeos version: 0.2-19, (SVN revision 394)
 GEOS runtime version: 3.3.8-CAPI-1.7.8 
 Polygon checking: TRUE 

> layer='Divisions'
> divs = importShapefile(layer, projection='LL')
Error in 1:nrow(dbf) : argument of length 0

使用 readDBF=F 确实允许读取 shapefile 数据:

> divs = importShapefile(layer, projection='LL', readDBF=F)

到目前为止,importShapefile() 一直在新开始的 R 会话中工作。

【讨论】:

    【解决方案2】:

    查看 shapefile 所在的文件夹。实际上有.dbf 文件吗?如果有,听起来它是空的、已损坏或名称错误。您是否希望您的 shapefile 具有带有属性的多边形。你可以试试importShapefile(... readDBF = FALSE )吗?也许您可以通过保管箱链接或其他方式提供我们的数据?

    您是否尝试过rgdal:::readOGR 或者我个人最喜欢的maptools:::readShapePoly()。我个人认为readShapePoly() 非常健壮,并且有一些方法可以将SpatialPolygonsDataFramesp 强制转换为来自PBS 的PolySet

    如果您真的必须使用 PBS,您是否尝试过...

    require( maptools )
    require( sp )
    myshp <- readShapePoly("Data/pvi_stat_2002_utm")
    myshpPBS <- SpatialPolygons2PolySet( myshp )
    

    我假设您的 shapefile 中有一个 .prj 文件,描述了投影信息?

    【讨论】:

    • @Jordan 在哪里?我没看到!
    • 谢谢!保管箱链接:dropbox.com/sh/ckgtyvtjh6z27km/6HaDADQ0J8。如果可能的话,我宁愿坚持 w/PBSmapping b/c 的后续处理。我可以重新开始,但由于 importShapefile 大约有 10 次有效,所以我有点犹豫。我试过 read.DBF=F 但这并没有消除错误。此外,我需要 DBF 数据(尽管我稍后可以读取 dbf 数据并重新加入 PolyData)进行处理。我可以使用 SpatialPolygons2PolySet 路线,尽管这似乎省略了我的其他数据字段(同样,我可以在之后重新加入)。奇怪的是它通常工作正常。 @SimonO101
    • 对不起@SimonO101 - 这是我的第一篇文章,我没有意识到输入键会提交我的评论。
    • @Simon0101 - 你对变通方法的建议很棒。谢谢。我还想我会跟进任何遇到同样问题的人。随着最近对 PBSmapping 包和几个依赖项的更新,错误似乎已经消失了......所以如果您遇到同样的问题,版本 2.65.49 PBSmapping 应该可以缓解它。
    猜你喜欢
    • 1970-01-01
    • 2019-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-27
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多