Я хочу увеличить матрицу смежности графика 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'. Вы не можете добавлять ребра и обновлять вес других ребер за один шаг. Вы также не можете удалять ребра и добавлять края в один шаг. Btw. добавление весов не изменяет индексы внутреннего igraph, но в R он копирует весь график один раз. –