Получить вершину в последовательности вершин

#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 .