“在尝试进行摩擦加权连接分析时,无法找到签名函数‘costDistance’的继承方法”错误

问题描述 投票:0回答:1

目的

我想要实现的目标:我正在尝试使用摩擦栅格计算形状文件中多边形的摩擦加权连接值。 shape 文件象征蝴蝶 Euphyyas aurinia 的栖息地,摩擦栅格代表这些栖息地之间的扩散矩阵。我一直在尝试使用 gdistance 包来完成此任务。

输入数据:

  1. 形状文件中包含 81 个多边形的形状文件。

  2. 摩擦栅格,其中每个像素代表蝴蝶在特定栖息地分散的难度

问题是,到目前为止,我尝试过的所有不同方法都一遍又一遍地返回相同的错误消息,无论我尝试做什么,即:

示例1

library(sf) 
library(raster) 
library(gdistance)

Ihopslagen_path <- "censored" 
IhopslagenSfReadF <- st_read(Ihopslagen_path) 
IhopslagenSfReadZm <- st_zm(IhopslagenSfRead)

print(IhopslagenSfRead)

FrictionRasterPath <- "censored" 
FrictionRaster <- raster(FrictionRasterPath)

print(FrictionRaster)

FricPoly_raster <- rasterize(IhopslagenSfReadZm, FrictionRaster)

num_polygonsF <- nrow(IhopslagenSfReadZm) FricDistMatrix <- matrix(0, nrow = num_polygonsF, ncol = num_polygonsF) 

transition <- transition(FricPoly_raster, function(x) 1, directions = 8)

for (i in 1:num_polygonsF) { 
 for (j in 1:num_polygonsF) { 
FricDistMatrix[i, j] <- costDistance(FricPoly_raster[i], FricPoly_raster[j], transition) 
} 
}
Error in (function (classes, fdef, mtable) : unable to find an inherited method for function ‘costDistance’ for signature ‘"numeric", "numeric", "TransitionLayer

示例2

library(sf) 
library(raster) 
library(gdistance)

Ihopslagen_path <- "censored" 
IhopslagenSfReadF <- st_read(Ihopslagen_path) 
IhopslagenSfReadZm <- st_zm(IhopslagenSfReadF)

print(IhopslagenSfReadZm)

FrictionRasterPath <- "censored" 
FrictionRaster <- raster(FrictionRasterPath)

print(FrictionRaster)

FricPoly_raster <- rasterize(IhopslagenSfReadZm, FrictionRaster)

num_polygonsF <- nrow(IhopslagenSfReadZm) 
FricDistMatrix <- matrix(0, nrow = num_polygonsF, ncol = num_polygonsF) 
ransition <- transition(FricPoly_raster, function(x) 1, directions = 8)

for (i in 1:num_polygonsF) { for (j in 1:num_polygonsF) { FricDistMatrix[i, j] <- costDistance(FricPoly_raster[[i]], FricPoly_raster[[j]], transition) } }
Error in (function (classes, fdef, mtable) : unable to find an inherited method for function ‘costDistance’ for signature ‘"RasterLayer", "RasterLayer", "TransitionLayer"

示例3

library(sf) 
library(raster) 
library(gdistance)

Ihopslagen_path <- "censored" 
IhopslagenSfReadF <- st_read(Ihopslagen_path) 
IhopslagenSfReadZm <- st_zm(IhopslagenSfReadF)

FrictionRasterPath <- "censored" 
FrictionRaster <- raster(FrictionRasterPath)

FricPoly_raster <- rasterize(IhopslagenSfReadZm, FrictionRaster)

transition <- transition(FricPoly_raster, function(x) 1, directions = 8)


FricDistMatrix <- costDistance(FricPoly_raster, transition)
Error in (function (classes, fdef, mtable) : unable to find an inherited method for function ‘costDistance’ for signature ‘"RasterLayer", "TransitionLayer", "missing

示例4

library(sf) 
library(raster) 
library(gdistance)

Ihopslagen_path <- "censored" 
IhopslagenSfReadF <- st_read(Ihopslagen_path) 
IhopslagenSfReadZm <- st_zm(IhopslagenSfReadF)

FrictionRasterPath <- "censored" 
FrictionRaster <- raster(FrictionRasterPath)

FricPoly_raster <- rasterize(IhopslagenSfReadZm, FrictionRaster)

transition <- transition(FricPoly_raster, function(x) 1, directions = 8)

FricDistMatrix <- costDistance(FricPoly_raster, FricPoly_raster, transition)
Error in (function (classes, fdef, mtable)  : unable to find an inherited method for function ‘costDistance’ for signature ‘"RasterLayer", "RasterLayer", "TransitionLayer"’

我在发送后被建议使用成本距离函数,从而进入了这个思路:

# Which function from the gDistance package do I need to use in this code where the ??? is? library(sf) library(raster) library(terra) library(gdistance) 

Ihopslagen_path <- "censored" IhopslagenSfRead <- st_read(Ihopslagen_path) IhopslagenSfReadZm <- st_zm(IhopslagenSfRead)

print(IhopslagenSfRead) FrictionRasterPath <- "censored" FrictionRaster <- raster(FrictionRasterPath) print(FrictionRaster)

FricPoly <- st_geometry(IhopslagenSfRead) num_polygonsF <- nrow(IhopslagenSfRead) FricDistMatrix <- matrix(0, nrow = num_polygonsF, ncol = num_polygonsF)

for (i in 1:num_polygonsF) { for (j in 1:num_polygonsF) { FricDistMatrix <- ???(FricPoly[i], FricPoly[j], FricPoly) } }

请帮助我,我失去了理智

r matrix r-sf r-raster connectivity
1个回答
0
投票

gdistance::costDistance
的第二个和第三个参数是

点位置集(空间点、矩阵或数字类)

您正在提供其他数据类型,因此它不起作用。

参见

?gdistance::costDistance

© www.soinside.com 2019 - 2024. All rights reserved.