簡體   English   中英

從列表到鄰接矩陣

[英]From list to adjacency matrix

我有一個這樣的清單:

> print(list)
[[1]]
[1] 1

[[2]]
[1] 4

[[3]]
[1] 1

[[4]]
[1] 2

[[5]]
[1] 2

[[6]]
[1] 3

[[7]]
[1] 2

[[8]]
[1] 5

[[9]]
[1] 1

[[10]]
[1] 2

[[11]]
[1] 3

[[12]]
[1] 7

[[13]]
[1] 3

[[14]]
[1] 4

[[15]]
[1] 3

[[16]]
[1] 5

[[17]]
[1] 1

[[18]]
[1] 1

[[19]]
[1] 4

[[20]]
[1] 6

現在,我想將此列表轉換為鄰接矩陣,以便隨后可以建立一個不簡單的無向圖(可能存在多鏈接和自環)。

該列表應成對讀取,即(1 4)表示存在從節點1到節點4的鏈接,對(1 2)表示存在從節點1到節點2的鏈接,依此類推。

我怎樣才能做到這一點?

我以為我使用for循環以step = 2遍歷了列表,但還沒有找到方法。 而且我不確定如何分配矩陣的值,我對多重鏈接的要求是什么?

非常感謝

我懷疑您正在尋找這樣的東西:

# Input
my_list <- list(1, 4, 1, 2, 2, 3, 2, 5, 1, 2, 3, 7, 3, 4, 3, 5, 1, 1, 4, 6)

# Make to vector
my_list <- unlist(my_list)

# Number of vertices in graph (may change this to any number > max(my_list))
num_vertices <- max(my_list)

# Number of edges
num_edges <- length(my_list) / 2

# Transform edge data into data.frame, each row is an edge
edges <- data.frame(tails = my_list[rep(c(TRUE, FALSE), num_edges)],
                    heads = my_list[!rep(c(TRUE, FALSE), num_edges)])

# Count duplicate edges (if multi-edges should not be allowed, set count to 1)
edges$count <- ave(rep(1, num_edges), edges, FUN = base::sum)

# Remove duplicate edges, count encodes multi-edges
edges <- edges[!duplicated(edges), ]

# Make empty adjacency matrix
adjacency_matrix <- matrix(0, ncol = num_vertices, nrow = num_vertices)

# Populate matrix
adjacency_matrix[as.matrix(edges[, c("heads", "tails")])] <- edges$count

# Make graph undirected
adjacency_matrix <- adjacency_matrix + t(adjacency_matrix) - diag(diag(adjacency_matrix))

順便說一句, list可能不是list的最佳名稱。

這是另一種方式

lst <- list(1, 4, 1, 2, 2, 3, 2, 5, 1, 2, 3, 7, 3, 4, 3, 5, 1, 1, 4, 6)
library(igraph)
g <- make_graph(unlist(lst), directed = F)
( m <- as_adjacency_matrix(g, sparse = F) ) 
#      [,1] [,2] [,3] [,4] [,5] [,6] [,7]
# [1,]    1    2    0    1    0    0    0
# [2,]    2    0    1    0    1    0    0
# [3,]    0    1    0    1    1    0    1
# [4,]    1    0    1    0    0    1    0
# [5,]    0    1    1    0    0    0    0
# [6,]    0    0    0    1    0    0    0
# [7,]    0    0    1    0    0    0    0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM