R语言如何为图的邻接矩阵添加存储顶点名称的names属性
R邻接矩阵存储顶点名称的正确操作
基础逻辑说明
R中矩阵本质是带有dim维度属性的向量,默认的names()方法作用于矩阵展开后的所有单个元素,这就是你直接赋值names(mat) <- 顶点名时只会给前5个元素命名、剩余位置全为NA的原因,该方法本身设计上就不是用来存储行列对应的顶点名称的。
你之前设置rownames和colnames的操作,其实是把名称存储到了矩阵的原生dimnames属性中,这是R生态下邻接矩阵存储顶点名称的标准规范,绝大多数图分析相关R包读取邻接矩阵时都会自动识别dimnames作为顶点名,完全可以满足常规使用需求,不需要额外调整属性:
# 标准写法(推荐) mat <- matrix(1, nrow = 5, ncol = 5) # 设置行列名,顶点名存储在dimnames属性中 rownames(mat) <- c('1', '2', '3', '4', '5') colnames(mat) <- c('1', '2', '3', '4', '5') # 读取顶点名 vertex_names <- rownames(mat)
自定义names属性的实现方法
如果你有特殊需求,必须把顶点名称存储到矩阵的names属性下,可以用attr()函数直接设置自定义属性,不会影响矩阵本身的元素和结构:
mat <- matrix(1, nrow = 5, ncol = 5) # 直接给矩阵添加自定义names属性存储顶点名 attr(mat, "names") <- c('1', '2', '3', '4', '5') # 读取存储的顶点名 vertex_names <- attr(mat, "names")
内容的提问来源于stack exchange,提问作者thesecond
相关产品推荐
相关产品推荐

