Я пытаюсь добавить ребра к графу с циклом for. Цикл for добавляет ребра к графику на основе узлов в x и y. x - это вектор узлов, в котором несколько узлов в y необходимо сформировать кромку.Добавление краев в узлы в графе быстрее с помощью igraph в R
Я создал цикл вложенных циклов для прокрутки индексов списка и количества узлов в каждом индексе y, но он медленный. Я хотел бы ускорить это, так как граф может получить намного больше, чем только 6 узлов (~ тысяч). Я попытался использовать функцию apply (открыть другие быстрые предложения, если они есть), чтобы сделать это быстрее, но не удалось.
library(igraph)
x = 1:6
head(y)
[[1]]
[1] 3
[[2]]
[1] 2 6
[[3]]
[1] 3 4
[[4]]
[1] 5 3
[[5]]
[1] 4 6 5 3
g = graph.empty(6, directed = FALSE)
g
IGRAPH U--- 6 0 --
+ edges:
Что у меня есть это
for (m in 1:length(y)) {
for (j in 1:length(y[[m]])) {
g = add.edges(g, edges = c(x[m], y[[m]][j]))
}
}
g
IGRAPH U--- 6 11 --
+ edges:
[1] 1--3 2--2 2--6 3--3 3--4 4--5 3--4 4--5 5--6
[10] 5--5 3--5
EDIT Попытка устранить ошибку я получаю, используя предложенный код выглядит следующим образом:
set.seed(1)
x=1:5
x = as.numeric(x)
y = vector(mode='list', length=5)
y[[1]] = 3
y[[2]] = c(2,6)
y[[3]] = c(3,4)
y[[4]] = c(5,3)
y[[5]] = c(4,6,5,3)
class(x); class(y)
#[1] "numeric"
#[1] "list"
sum(is.na(x)) != 0
#[1] FALSE
length(x) == length(y)
#[1] TRUE
edges = stack(setNames(y, x[1:length(y)]))
#Error in (function (classes, fdef, mtable) :
#unable to find an inherited method for function ‘raster’ for signature ‘"numeric"’
edges = na.omit(as.data.frame(lapply(stack(setNames(y, x[1:length(y)])), function(col) as.numeric(as.character(col)))))
#Error in as.data.frame(lapply(stack(setNames(y, x[1:length(y)])), function(col) as.numeric(as.character(col)))) :
#error in evaluating the argument 'x' in selecting a method for function 'as.data.frame': Error in (function (classes, fdef, mtable) :
#unable to find an inherited method for function ‘raster’ for signature ‘"numeric"’
вы можете передать несколько ребер в add_edges, http://stackoverflow.com/questions/39800516/add-more-than-one- edge-based-on-edge-attributes-using-igraph/39862276 # 39862276 – user20650
Возможно, вам захочется перезапустить сеанс R. Я не получаю сообщение об ошибке для обеих версий. – Psidom