返回值的函数(velox 光栅)

Posted

技术标签:

【中文标题】返回值的函数(velox 光栅)【英文标题】:Function to return values (velox raster) 【发布时间】:2017-04-16 17:06:25 【问题描述】:

我正在使用新的 velox 提取功能来加快 shapefile 的光栅提取速度。

旧 raster 包的提取函数默认返回一个单元格值列表,例如当您使用以下格式时:

val.list <- raster::extract(raster, shapefile)

新的 velox 包需要一个 fun= 参数,而我这辈子都无法让它返回值:

vx.raster <- velox(raster)
vx.vals <- vx.raster$extract(shapefile, fun=??????)

I have tried:
fun=values (returns error Error during wrapup: unable to find an inherited method for function 'values' for signature 'numeric'
fun=function(x)values(x) (same error as above)

我觉得 fun=sum, fun=mean 工作得很好。价值观怎么了?我是否只是遗漏了一些关于数字向量并返回值列表的明显内容(我觉得这是最有可能的情况)?

谢谢!

【问题讨论】:

来自?extract: "fun: (...) 该函数应该将单个数值向量作为参数并返回单个值"。来自?value:“值:栅格值的向量或矩阵”。会不会是这个问题? fun=function(x)xfun=as.numeric 怎么样? fun=function(x)x 和 fun=as.numeric 都不起作用。但它确实有一个不同的错误,“Out[p, k] 如果你看一下函数velox_extract的代码:github.com/cran/velox/blob/master/R/velox_extract.R似乎输出是一个数据框,每个多边形(p)只有一个值,每一列都有一个值多边形相关的数据框。值列表的情况显然没有在这里实现。 我得出了同样的结论。感谢StatnMap。我还通过电子邮件向软件包的开发人员发送了电子邮件,以查看是否有任何值解决方案,但同意,查看该代码似乎输出是每个多边形的单个值......太糟糕了,因为 raster::extract 非常慢大量的多边形。像这里gis.stackexchange.com/questions/130522/… 那样使用带有裁剪和getvalues 的foreach 循环确实会有所帮助,但是如果裁剪尺寸相对于多边形中的像素非常小,则会出现问题。 【参考方案1】:

velox 的开发版本(在 github 上)现在允许从 VeloxRaster_extract 查询返回“原始”栅格值。只需将fun 参数设置为NULL

这是一个例子:

library(devtools)
install_github('hunzikp/velox')
library(velox)

## Make VeloxRaster with two bands
set.seed(0)
mat1 <- matrix(rnorm(100), 10, 10)
mat2 <- matrix(rnorm(100), 10, 10)
vx <- velox(list(mat1, mat2), extent=c(0,1,0,1), res=c(0.1,0.1),
        crs="+proj=longlat +datum=WGS84 +no_defs")

## Make SpatialPolygons
library(sp)
library(rgeos)
coord <- cbind(0.5, 0.5)
spoint <- SpatialPoints(coords=coord)
spols <- gBuffer(spgeom=spoint, width=0.5)

## Extract
vx$extract(sp=spols, fun=NULL)$buffer
#             [,1]        [,2]
# [1,]  1.27242932  0.04658030
# [2,]  0.41464143 -1.13038578
# [3,] -1.53995004  0.57671878
#  etc....

【讨论】:

【参考方案2】:

试试这个sn-p

vx.raster$crop(shapefile).

【讨论】:

以上是关于返回值的函数(velox 光栅)的主要内容,如果未能解决你的问题,请参考以下文章

js 如何创建带返回值的函数

C语言如何写有返回值的函数

返回布尔值的 Perl 函数实际上返回啥

fetchone函数和fetchall函数返回值的区别

JAVA语言中 有返回值的方法和无返回值的方法有啥区别啊 请举例子说明!!

函数 ajax 返回值的问题