#r #igraph #vertex
#r #igraph #вершина
Вопрос:
Последовательность вершин по igraph, похоже, не является последовательностью. Например:
Последовательность v by V( module.net )
является последовательностью, поскольку я могу получить к ней доступ [deg==1]
. Но почему это не работает, когда я пытаюсь peripheral[1]
? Любое возможное объяснение этому?
Набор данных для этого примера нелегко включить, извините за это.
//
Я нахожу ответ, индекс первой вершины ‘MED24’ равен 4, а не 1. Итак, если я хочу получить первую вершину, я должен сделать peripheral[1]
. Но это кажется немного необоснованным. Воспроизводимый пример:
g = graph.ring(5)
V(g)$name = c('node1', 'node2', 'node3','node4','node5')
temp = V(g)[2:3]
Если вы хотите получить доступ к ‘node3’ из temp, вы должны использовать temp[3]
вместо temp[2]
Комментарии:
1. Я не могу повторить вашу ошибку:
2. @RussHyde Можете ли вы поделиться своим тестом, который сработал? Возможно, вы включили вершину 1 в свою последовательность, а затем индексировали по
[1]
?3. да, извините. Я видел ошибку своих путей.
4. Смотрите мои дополнения. Но это немного неудобно
5. @RussHyde Все в порядке. Я сделал то же самое и в первый раз. Вот почему всегда лучше, когда OP фактически предоставляет тестовые данные, чтобы сделать проблему воспроизводимой.
Ответ №1:
У меня всегда были проблемы с последовательностями вершин и последовательностями ребер. Проблема с оператором индексации для этих объектов заключается в том, что поиск выполняется по имени вектора, а не по позиции. Итак peripheral[1]
, мы ищем, есть ли вектор 1 в списке, он не извлекает первый элемент в списке.
Лучшее, что я придумал, это преобразовать последовательность в простой вектор и переиндексировать список векторов. Например
el <- cbind(letters[1:5], letters[c(2,3,5,1,4)])
gg <- graph.edgelist(el)
p <- V(gg)[c(2,3)]
V(gg)[as.vector(p)[1]]
На самом деле, если вы просто хотите извлечь имя конкретной вершины, то
p$name[1]
будет работать.
Комментарии:
1. Да, ваш способ работает. Смотрите мои дополнения. Но это немного неудобно
2. @yliueagle Смотрите мои обновления. Если вам нужно просто имя вершины, то вы можете использовать
peripheral$name[1]
. Вероятно, это больше то, что вы хотите. Нет необходимостиas.vector
.