【问题标题】:Generating no edges from adjacency matrix从邻接矩阵不生成边
【发布时间】:2021-05-08 00:16:23
【问题描述】:

当从igraph 调用graph_from_adjacency_matrix() 时,我完全没有优势。

library(igraph)

set.seed(42)

# data = read.table("sequences_distancematrix.out", row.names = 1, stringsAsFactors = FALSE, header = TRUE)
data = read.table("https://pastebin.com/raw/UWt56tfh", row.names = 1, stringsAsFactors = FALSE, header = TRUE)


dismat = data.matrix(data)

# build the graph object
network <- graph_from_adjacency_matrix(dismat, mode = "undirected")

但是在检查网络时没有边缘:

> print_all  (network)
IGRAPH f4f6666 UN-- 46 0 -- 
+ attr: name (v/c)

我虽然可能是因为 igraph 不接受低于 0 的双精度数,所以 x10 矩阵中的所有内容都得到相同的结果

距离矩阵:https://pastebin.com/UWt56tfh

任何帮助将不胜感激。

【问题讨论】:

  • 看来你需要weighted=TRUE,或者使用graph_from_adjacency_matrix(dismat &gt; 0, ...),这很令人惊讶,虽然我已经有一段时间没有阅读帮助?graph_from_adjacency_matrix
  • 我使用距离矩阵也有关系吗?
  • 因为它是一个距离矩阵,您可能需要一个加权图
  • 认为 相关位可能是“如果它为 NULL,则创建一个未加权图,并且邻接矩阵的元素给出了顶点。" .如果您的 r 权重
  • 这似乎合乎逻辑。我现在越来越边缘化,因此将过滤以仅显示超过一定距离的那些。

标签: r igraph


【解决方案1】:
  • 如果您想要加权边缘:
(network <- graph_from_adjacency_matrix(dismat, mode = "undirected", weighted = TRUE))
  • 如果您想要未加权的边缘:
(network <- graph_from_adjacency_matrix(dismat > 0, mode = "undirected"))

【讨论】:

  • 我正在使用从基因组序列的 mash 距离生成的距离矩阵。 @user20650 建议加权会更合适,因为我对加权网络的理解正确?
【解决方案2】:

我不确定你是如何尝试将所有内容都乘以 10,但这对我有用。

library(igraph)

data <- read.table("https://pastebin.com/raw/UWt56tfh", 
                  row.names = 1, stringsAsFactors = FALSE, header = TRUE) 

dismat <- data.matrix(data)
network <-  graph_from_adjacency_matrix(dismat*10, mode = "undirected")
print_all(network)

【讨论】:

  • 乘以一个常数确实是命中或错过,并可能导致意想不到的结果。尝试m = matrix(0.1, 3, 3); diag(m) = 0 ; g = graph_from_adjacency_matrix(K* m, mode = "undirected") ; E(g) 获取各种K,例如10,15,25。好像取double的floor向下取整到最接近的整数,这个整数决定了两个节点之间的边数。
猜你喜欢
  • 2014-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多