【问题标题】:How to convert adjacency list to adjacency matrix in R?如何将邻接列表转换为R中的邻接矩阵?
【发布时间】:2017-04-03 10:31:29
【问题描述】:

我有以下形式的邻接列表:

1.  3,4
2.  4
3.  1,4
4.  1,2,3

我想用 R 转换成邻接矩阵。 我尝试了各种命令,例如将邻接列表转换为igraph对象,然后将igraph重新转换为邻接矩阵,但得到的邻接矩阵是S4 class。我想要简单的命令将邻接列表转换为 R 中的邻接矩阵。

数据

 list(c(1L, 3L, 4L, 8L, 14L, 31L, 2L, 29L, 33L, 7L, 11L, 17L, 
5L, 6L, 34L), c(2L, 3L, 4L, 8L, 9L, 12L, 13L, 14L, 18L, 22L, 
1L, 10L, 33L, 34L), c(2L, 3L, 4L, 8L, 9L, 12L, 13L, 14L, 18L, 
20L, 22L, 32L, 1L, 31L, 34L, 24L), c(2L, 3L, 4L, 5L, 6L, 7L, 
8L, 9L, 11L, 12L, 13L, 14L, 18L, 20L, 22L, 1L, 31L, 10L, 28L, 
29L), c(4L, 5L, 6L, 7L, 8L, 9L, 11L, 12L, 13L, 14L, 18L, 20L, 
22L, 32L, 1L, 17L), c(4L, 5L, 6L, 7L, 8L, 9L, 11L, 12L, 13L, 
14L, 18L, 20L, 22L, 32L, 1L, 17L), c(4L, 5L, 6L, 7L, 8L, 9L, 
11L, 12L, 13L, 14L, 18L, 20L, 22L, 32L, 1L, 17L), c(2L, 3L, 4L, 
5L, 6L, 7L, 8L, 9L, 11L, 12L, 13L, 14L, 18L, 20L, 22L, 32L, 1L, 
31L, 10L, 28L, 29L), c(2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 11L, 12L, 
13L, 14L, 18L, 20L, 22L, 32L, 10L, 28L, 29L, 33L, 34L, 15L, 16L, 
19L, 21L, 23L, 24L, 30L, 31L, 27L), c(2L, 4L, 8L, 9L, 10L, 14L, 
28L, 29L, 33L, 15L, 16L, 19L, 20L, 21L, 23L, 24L, 27L, 30L, 31L, 
32L), c(4L, 5L, 6L, 7L, 8L, 9L, 11L, 12L, 13L, 14L, 18L, 20L, 
22L, 32L, 1L, 17L), c(2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 11L, 12L, 
13L, 14L, 18L, 20L, 22L, 32L), c(2L, 3L, 4L, 5L, 6L, 7L, 8L, 
9L, 11L, 12L, 13L, 14L, 18L, 20L, 22L, 32L), c(2L, 3L, 4L, 5L, 
6L, 7L, 8L, 9L, 11L, 12L, 13L, 14L, 18L, 20L, 22L, 32L, 1L, 31L, 
10L, 28L, 29L, 33L, 15L, 16L, 19L, 21L, 23L, 24L, 27L, 30L), 
    c(9L, 15L, 16L, 19L, 21L, 23L, 24L, 30L, 31L, 32L, 10L, 14L, 
    20L, 27L, 28L, 29L), c(9L, 15L, 16L, 19L, 21L, 23L, 24L, 
    30L, 31L, 32L, 10L, 14L, 20L, 27L, 28L, 29L), c(1L, 7L, 11L, 
    17L, 5L, 6L), c(2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 11L, 12L, 
    13L, 14L, 18L, 20L, 22L, 32L, 31L), c(9L, 15L, 16L, 19L, 
    21L, 23L, 24L, 30L, 31L, 32L, 10L, 14L, 20L, 27L, 28L, 29L
    ), c(3L, 4L, 5L, 6L, 7L, 8L, 9L, 11L, 12L, 13L, 14L, 18L, 
    20L, 22L, 32L, 31L, 10L, 15L, 16L, 19L, 21L, 23L, 24L, 27L, 
    28L, 29L, 30L), c(9L, 15L, 16L, 19L, 21L, 23L, 24L, 30L, 
    31L, 32L, 10L, 14L, 20L, 27L, 28L, 29L), c(2L, 3L, 4L, 5L, 
    6L, 7L, 8L, 9L, 11L, 12L, 13L, 14L, 18L, 20L, 22L, 32L, 31L
    ), c(9L, 15L, 16L, 19L, 21L, 23L, 24L, 30L, 31L, 32L, 10L, 
    14L, 20L, 27L, 28L, 29L), c(24L, 25L, 32L, 3L, 34L, 27L, 
    33L, 9L, 15L, 16L, 19L, 21L, 23L, 30L, 31L, 10L, 14L, 20L, 
    28L, 29L), c(24L, 25L, 32L, 34L, 26L, 29L), c(26L, 28L, 30L, 
    33L, 34L, 32L, 25L, 29L), c(24L, 27L, 33L, 9L, 10L, 14L, 
    15L, 16L, 19L, 20L, 21L, 23L, 28L, 29L, 30L, 31L, 32L), c(4L, 
    8L, 9L, 10L, 14L, 28L, 29L, 33L, 26L, 30L, 32L, 15L, 16L, 
    19L, 20L, 21L, 23L, 24L, 27L, 31L), c(1L, 4L, 8L, 9L, 10L, 
    14L, 28L, 29L, 33L, 25L, 26L, 15L, 16L, 19L, 20L, 21L, 23L, 
    24L, 27L, 30L, 31L, 32L), c(26L, 28L, 30L, 33L, 34L, 9L, 
    15L, 16L, 19L, 21L, 23L, 24L, 31L, 32L, 10L, 14L, 20L, 27L, 
    29L), c(1L, 3L, 4L, 8L, 14L, 18L, 20L, 22L, 31L, 33L, 34L, 
    9L, 15L, 16L, 19L, 21L, 23L, 24L, 30L, 32L, 10L, 27L, 28L, 
    29L), c(3L, 5L, 6L, 7L, 8L, 9L, 11L, 12L, 13L, 14L, 18L, 
    20L, 22L, 32L, 26L, 28L, 24L, 25L, 15L, 16L, 19L, 21L, 23L, 
    30L, 31L, 10L, 27L, 29L), c(1L, 2L, 9L, 10L, 14L, 28L, 29L, 
    33L, 31L, 34L, 26L, 30L, 24L, 27L), c(1L, 3L, 31L, 33L, 34L, 
    2L, 26L, 30L, 24L, 25L, 9L))

【问题讨论】:

  • 示例请使用dput
  • 您能否检查我添加到您问题中的数据是否正确,因为您评论中的代码会引发错误。 [as_adjacency_matrix(graph_from_adj_list(lst))]
  • as_adjacency_matrix(graph_from_adj_list(lst)) 这没有给出错误。相反,它提供了 S4 类对象
  • @kumar ;它以稀疏矩阵形式返回邻接,这是一个很好的默认值。您可以将其转换为标准矩阵,方法是将输出包装在as.matrix 中,或者使用sparse 参数;即as_adjacency_matrix(graph_from_adj_list(lst), sparse = FALSE)

标签: r adjacency-list adjacency-matrix


【解决方案1】:

假设el是一个边列表:

el = list(c(3,4),
          c(2,4),
          c(1,4),
          c(1,2,3))

#Get the matrix dimension
dim <- length(el)

m <- sapply(el, function(x) { r<-rep(0,dim); r[unlist(x)]<-1;r})
     [,1] [,2] [,3] [,4]
[1,]    0    0    1    1
[2,]    0    1    0    1
[3,]    1    0    0    1
[4,]    1    1    1    0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多