我正在尝试使用spsample()
中的sp
来使用GDAM中的SpatialPolygonsDataFrame
对比利时境内的点进行采样。这会导致seq.default()
- 调用错误。
be <- readRDS(gzcon(url('http://biogeo.ucdavis.edu/data/gadm2.8/rds/BEL_adm0.rds')))
spsample(be, type="hexagonal", cellsize=10)
seq.default(ll[1], ur[1] - dx/2, dx)
中的错误: 错误签到'by'参数
str(be)
# Formal class 'SpatialPolygonsDataFrame' [package "sp"] with 5 slots
# ..@ data :'data.frame': 1 obs. of 68 variables:
# .. ..$ OBJECTID : int 1
# [snip]
# .. ..$ LDC : chr ""
# ..@ polygons :List of 1
# .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
# .. .. .. ..@ Polygons :List of 3
# .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
# .. .. .. .. .. .. ..@ labpt : num [1:2] 3.37 51.36
# [snip]
进一步尝试:
SpatialPolygons
- 对象会导致相同的错误。packageVersion('sp')
# [1] ‘1.2.3’
答案 0 :(得分:1)
您的cellsize
太大了。
查看be
:
bbox(be)
# min max
# x 2.555356 6.40787
# y 49.497215 51.50382
我不明白 以及spsample
正在做什么,但是如果你看一下追溯你的错误的结果,你可以在代码中调试一下:< / p>
spsample(be, type="hexagonal", cellsize=10)
traceback()
# 9: stop("wrong sign in 'by' argument")
# 8: seq.default(ll[1], ur[1] - dx/2, dx)
# 7: seq(ll[1], ur[1] - dx/2, dx)
# 6: genHexGrid(dx, bb[, 1], bb[, 2])
# 5: hexGrid(bb, n = n, offset = offset, cellsize = cellsize)
# 4: sample.Spatial(as(x, "Spatial"), n_tot * (1 + its * 0.1), type = type,
# offset = offset, ...)
# 3: .local(x, n, type, ...)
# 2: spsample(be, type = "hexagonal", cellsize = 10)
# 1: spsample(be, type = "hexagonal", cellsize = 10)
您可以查看hexGrid
/ genHexGrid
的代码(输入getAnywhere("hexGrid")
或者,因为您可以通过输入{来猜测代码位于sp
包中控制台上的{1}},您会看到sp:::hexGrid
已分配给cellsize
; dx
是ur
的{{1}}列; max
是bbox(be)
的{{1}}列。
因此,您尝试创建的ll
序列实际上是:
min
因此,这是尝试创建一个从较高数字到较低数字的序列,以正数递增,这是不可能的。
相反,请尝试较小的bbox(be)
:
x
我能够通过x <- seq(2.555, 1.408, 10)
与谨慎使用cellsize
相结合来解决这个问题。希望这个答案可以作为一个有用的调试工具箱。