r - 如何使用函数 cppRouting (R) 在非方形二进制矩阵中获得最短路径
问题描述
我有一个给定二进制非方阵的计算,如下图所示。
我想找到由值为“1”的单元格创建的路径两端之间的最短路径。未来的目标是获取路径,绘制它并计算从其他单元格到该路径的距离。
我不清楚它的功能get_distance_matrix
和get_distance_pair
工作get_path_pair
原理。
所以我创建了一个数据框 df,它只有值“1”的单元格。
- 我需要这样做还是可以将矩阵与 0 和 1 一起使用?
- 如何定义起点(from)和目的地(to)?我需要给协调
c(row,col)
吗? - 如何获取创建路径的矩阵的节点/单元的列表(包括坐标行和列)以便在将来的计算中使用?该功能现在只给我一个数字,但我无能为力。
library(data.table)
library(cppRouting)
setwd("C:/Users/laure/Desktop/Land cover rural")
mat <- read.csv("test.csv", header = TRUE)
mat <- as.matrix(mat)
> mat
X0 X0.1 X0.2 X0.3 X1 X1.1 X1.2 X1.3 X1.4 X0.4 X0.5
[1,] 0 0 0 0 1 1 1 1 0 0 0
[2,] 0 0 0 0 1 1 0 0 0 0 0
[3,] 0 0 0 0 1 1 0 0 0 0 0
[4,] 0 0 0 0 1 1 0 0 0 0 0
[5,] 0 0 0 0 1 1 0 0 0 0 0
[6,] 0 0 0 0 1 0 0 0 0 0 0
[7,] 0 0 0 0 1 0 0 0 0 0 0
[8,] 0 0 0 1 1 0 0 0 0 0 0
[9,] 0 0 0 1 1 0 0 0 0 0 0
[10,] 0 0 0 1 1 0 0 0 0 0 0
[11,] 0 0 1 1 0 0 0 0 0 0 0
[12,] 0 0 1 1 0 0 0 0 0 0 0
[13,] 0 0 1 1 0 0 0 0 0 0 0
[14,] 0 0 1 1 0 0 0 0 0 0 0
[15,] 0 0 0 1 0 0 0 0 0 0 0
[16,] 0 0 0 1 0 0 0 0 0 0 0
[17,] 0 0 0 1 0 1 0 0 0 0 0
[18,] 0 0 0 1 1 0 0 0 0 0 0
[19,] 0 0 0 1 1 0 0 0 0 0 0
[20,] 0 0 0 1 1 0 0 0 0 0 0
[21,] 0 0 0 1 1 0 0 0 0 0 0
[22,] 0 0 0 1 1 0 0 0 0 0 0
[23,] 0 0 0 1 1 0 0 0 0 0 0
[24,] 0 0 0 0 1 0 0 0 0 0 0
[25,] 0 0 0 0 1 1 0 0 0 0 0
[26,] 0 0 0 1 1 1 1 0 0 0 0
[27,] 0 0 0 0 1 1 1 1 1 0 0
[28,] 0 0 0 0 0 0 1 1 1 0 0
df <- data.frame()
ind <- 0
for(j in 1:v){
for(k in 1:h){
if (mat[j,k] == 1){
ind <- ind+1
df[ind, 1:3] <- data.frame(j, k, mat[j,k])
}
}
}
Graph <- makegraph(df,directed=FALSE)
from <- c(1,5)
to <- c(28,9)
test <- get_distance_matrix(Graph, from, to, algorithm = "phast",
allcores = FALSE)
> test
28 9
1 2 2
5 2 1
pair <- get_distance_pair(Graph, from , to, algorithm = "NBA")
> pair
[1] 2 1
path <- get_path_pair(Graph, from, to, algorithm = "Dijkstra", constant = 1,
keep = NULL, long = TRUE)
> path
from to node
1 1 28 28
2 1 28 7
3 1 28 1
4 5 9 9
5 5 9 5
> df
j k mat.j..k.
X1 1 5 1
X1.1 1 6 1
X1.2 1 7 1
X1.3 1 8 1
5 2 5 1
6 2 6 1
7 3 5 1
8 3 6 1
9 4 5 1
10 4 6 1
11 5 5 1
12 5 6 1
13 6 5 1
14 7 5 1
X0.3 8 4 1
16 8 5 1
17 9 4 1
18 9 5 1
19 10 4 1
20 10 5 1
X0.2 11 3 1
22 11 4 1
23 12 3 1
24 12 4 1
25 13 3 1
26 13 4 1
27 14 3 1
28 14 4 1
29 15 4 1
30 16 4 1
31 17 4 1
32 17 6 1
33 18 4 1
34 18 5 1
35 19 4 1
36 19 5 1
37 20 4 1
38 20 5 1
39 21 4 1
40 21 5 1
41 22 4 1
42 22 5 1
43 23 4 1
44 23 5 1
45 24 5 1
46 25 5 1
47 25 6 1
48 26 4 1
49 26 5 1
50 26 6 1
51 26 7 1
52 27 5 1
53 27 6 1
54 27 7 1
55 27 8 1
X1.4 27 9 1
57 28 7 1
58 28 8 1
59 28 9 1
解决方案
推荐阅读
- python - ImportError:尝试在没有已知父包的情况下进行相对导入?
- java - Java maven项目,构建失败版本不匹配
- spring-boot - 如何通过spring b使用roleID和secretID从保险库访问凭据?
- python - python打印以下输出
- r - 在 dplyr 中从变量中引用列名
- typescript - Typescript/cypress-cucumber-preprocessor :使用动态示例编写场景大纲
- multithreading - 两个类之间的非法跨线程操作。无法区分线程以解决问题
- c++ - GetWindowDC 工作不正常
- amazon-web-services - 取回 Lambda 函数返回的数据并更新我的 React App Amplify
- java - firebase 实时数据库未存储数据,logcat 未显示错误