我想增加igraph图的邻接矩阵。我尝试没有成功执行以下操作:在igraph图中批量修改边缘
require(igraph)
require(Matrix)
set.seed(123) # to get always the same graph (see "R reproducible example")
G <- igraph::erdos.renyi.game(20,10,type="gnm")
mat <- Matrix(1:16, ncol=4,nrow=4)
G[1:4, 1:4] <- mat
# Error in `[<-.igraph`(`*tmp*`, 1:4, 1:4, value = <S4 object of class "dgeMatrix">) :
# New value should be NULL, numeric or logical
也试过: G [1:4,1:4] < - as.numeric(垫)
# Error in `[<-.igraph`(`*tmp*`, 1:4, 1:4, value = c(1, 2, 3, 4, 5, 6, 7, :
# Logical or numeric value must be of length 1
我知道有关add.edges()功能,但它似乎不会取代边缘,而是附加重量?如果我错了,请纠正我的错误。
我是R
的新手,所以请尽可能详细。
由于
我不确定你在这里做什么? “替代边缘”是什么意思?如果要删除顶点1:4中的边,并添加矩阵中的边,那么只需使用'delete.edges()'和'add.edges()。 –
通过'替换边缘'我实际上意味着使用新的权重去除和替换边缘权重,只需要一个更有效的步骤。当我说高效时,我的意思是只更新需要它的位置上的节点的索引,而不是全部删除,然后将全部添加到我想要的子矩阵中。我猜这可能是缓慢的,因为节点索引必须更新两次,以获得子矩阵中的所有节点? – quine
如果边缘已经全部存在,那么只需更新它们的权重。这可以用'G [from = ...,to = ...] < - newweigths'完成。您不能在一个步骤中添加边和更新其他边的权重。无法在单个步骤中删除边和边。顺便说一句。添加权重不会改变内部的图形索引,但是在R中,它会复制整个图形一次。 –