2

我在 RStudio(0.97.318)中的 PBSmapping(版本 2.63.37)中收到一条带有 importShapefile 的零星错误消息,运行 R 版本 2.15.2,平台:i386-w64-mingw32/i386(32 位)。我在运行以前版本的 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。

4

2 回答 2

3

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

或者你有没有试过rgdal:::readOGR,或者,我个人最喜欢的,maptools:::readShapePoly(). 我个人发现readShapePoly()它非常健壮,并且有一些方法可以强制SpatialPolygonsDataFrame从PBSsp到 a 。PolySet

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

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

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

于 2013-03-13T17:59:27.257 回答
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 会话中工作。

于 2013-07-25T11:35:29.333 回答