tidygraph包as_tbl_graph函数报错:多逻辑值无法转为单个逻辑值
解决tidygraph::as_tbl_graph()矩阵转换报错问题
问题原因
报错源于tidygraph内部的guess_matrix_type函数逻辑缺陷:该函数用colnames(x) == rownames(x)对比矩阵的行列名,返回的是长度与矩阵维度一致的逻辑向量,但后续的||运算符要求单个逻辑值,导致类型转换失败。
解决办法
1. 显式指定矩阵参数,跳过自动检测
直接在as_tbl_graph中明确矩阵的有向性和权重属性,避免函数自动猜测类型:
library(tidygraph) # 你的邻接矩阵定义 adj <- structure(c(0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), dim = c(15L, 15L), dimnames = list(paste0("v",1:15), paste0("v",1:15))) # 显式指定参数转换 as_tbl_graph(adj, directed = TRUE, weighted = TRUE)
也可以先通过igraph转换,再转为tidygraph对象:
g <- igraph::graph_from_adjacency_matrix(adj, mode = "directed", weighted = TRUE) as_tbl_graph(g)
2. 更新tidygraph到最新版本
这个错误大概率是旧版本的bug,更新到最新版可直接解决:
# 安装CRAN稳定版 install.packages("tidygraph") # 或安装GitHub开发版(若需最新修复) # install.packages("devtools") devtools::install_github("thomasp85/tidygraph")
3. 临时修复内部函数(不推荐,仅应急)
若无法更新包,可临时修改guess_matrix_type函数的判断逻辑,将行列名对比改为全局判断:
# 备份原函数 original_guess <- tidygraph:::guess_matrix_type # 定义修复后的函数 fixed_guess <- function(x) { if (is.null(rownames(x)) && is.null(colnames(x))) { "adjacency" } else if (all(colnames(x) == rownames(x))) { if (any(x[upper.tri(x)] != 0) || any(x[lower.tri(x)] != 0)) { "adjacency" } else { "incidence" } } else { "incidence" } } # 替换包内函数 assignInNamespace("guess_matrix_type", fixed_guess, ns = "tidygraph") # 重新运行转换 as_tbl_graph(adj)
注意:修改包内部函数会随包更新失效,且可能引发其他未知问题,仅作为临时应急方案。
内容的提问来源于stack exchange,提问作者Moritz Schwarz
相关产品推荐
相关产品推荐

