Как перечислить все атрибуты вершины графа в R?

Я использую igraph пакет в R.

Я хотел бы связать некоторые данные с каждой вершиной, например. путем добавления атрибутов id и описания к каждому. Атрибуты определяются во время выполнения. У меня есть несколько связанных вопросов о том, как установить и получить эти данные.

Чтобы установить идентификатор вершины, я использую (где g - график):

> set.vertex.attribute(g,'id',1,'first_id') # etc

Я ожидал, что смогу прочитать атрибуты с помощью:

> get.vertex.attribute(g,'id',1)

Но это возвращает NULL. Я что-то делаю неправильно?

Кроме того, функция с вызовом get.vertex.attribute не имеет доступа к списку имен атрибутов. Как я могу извлечь имена атрибутов из графика g?

Наконец, я хочу установить/получить значения атрибутов из/в именованный список. Есть ли простой способ сделать это без прокрутки каждой вершины и атрибута и применения set. - или get.vertex.attribute?

спасибо!

Ответ 1

Похоже, вам нужно вернуть результаты set.vertex.attribute на g следующим образом:

g <- graph.data.frame(data.frame(one=1:2,two=2:3))
g <- set.vertex.attribute(g,'id',1,'first_id')
get.vertex.attribute(g,'id',1)
#[1] "first_id"

В качестве справки в ?get.vertex.attribute говорится:

graph: объект графика для работы. Обратите внимание, что исходный граф           никогда не изменен, вместо этого возвращается новый объект графа; если           вы не назначаете его переменной, ваши изменения будут           потерял! См. Примеры ниже.

Далее, из того же файла справки есть...

list.graph.attributes, list.vertex.attributes и list.edge.attributes вернуть вектор символов, имена атрибутов.

list.vertex.attributes(g)
#[1] "name" "id"  

С быстрым взглядом, похоже, не существует простой функции для ввода/вывода атрибутов вершин в массе. Вы можете придумать что-то вроде этого:

lapply(list.vertex.attributes(g),function(x) get.vertex.attribute(g,x))
#[[1]]
#[1] "1" "2" "3"
# 
#[[2]]
#[1] "first_id" NA         NA  

Ответ 2

Используйте следующий синтаксис для назначения атрибутов вершин на месте:

> V(g)[1]$id <- "first_id"
> V(g)[1]$id
[1] "aaa"

Этот синтаксис также позволяет вам получить или установить атрибут вершины для всех вершин; просто опустите индексирование:

> V(g)$id <- c("aa", "bb", "cc")