1

joincounts.multi()我的最终目标是使用R 包中的函数计算连接数spdep

我有一个非常大的栅格文件(nrows = 19663,ncols = 34073),像元大小为 30 m。它是具有两个值 0 和 1(以及许多 NoData 像元)的二进制栅格。它是整数格式。

首先,我需要生成一个nb对象——即邻居列表。这个包有多种方法可以做到这一点。对于多边形数据,使用poly2nb参数。对于网格单元,使用cell2nb参数。显然后者不适用于非常大的栅格 - 它使我的计算机崩溃,而谷歌搜索表明其他人也遇到了同样的问题。

编辑:我决定在更小的网格上执行此功能。我将所有网格都放在一个文件夹中,并希望循环运行以在每个网格上运行它。不过我遇到了一些问题。这是我的代码:

#set working directory
setwd("C:/Users/myData/")

#get a list of all the raster files in that folder
ingrids <- list.files(getwd(), pattern=".TIF$", full.names=FALSE, recursive=FALSE)

#loop through each raster file, dropping the file extension and giving a unique filename to each, and doing the "cell2nb" function on each. 
for (i in 1:length(ingrids)){
    fileName <-strsplit(ingrids[i],split="\\.")[[1]][1]
    outputFile<-paste(fileName, '_nb','.tif',sep='')
    mydatanb <- cell2nb(17,17, type="rook", torus=FALSE)
    mydataout <-writeRaster(BETUPAPnb, filename=outputFile, overwrite=TRUE)
}

我收到以下错误消息:

Error in (function (classes, fdef, mtable)  : unable to find an inherited method for function ‘writeRaster’ for signature ‘"nb", "character"’

我将不胜感激任何试图找出这个循环问题的帮助!

4

2 回答 2

1

该函数cell2nb为单元格生成邻居列表。传递mydata不正确,这就是产生错误的原因。以下是它期望的参数:

> cell2nb
function (nrow, ncol, type = "rook", torus = FALSE) 
{...}

您确实需要为其提供行数和列数。您可以summary.nb在创建的对象上使用cell2nb以查看它返回的对象的详细信息。

于 2014-08-26T00:10:05.823 回答
0

我对 cell2nb 函数的输出做出了错误的假设。它不是栅格,因此 WriteRaster 工具将不起作用。该函数创建一个“nb”对象,然后按原样在其他函数中调用该对象。

另一个关键信息是 cell2nb 函数不依赖于特定的栅格数据集,即不依赖于特定的空间排列。相反,它会根据用户指定的范围(稍后调用以在创建 nb 对象后使用的栅格数据的范围)创建一个 nb 对象。

于 2014-09-09T20:52:43.577 回答