Лаборатории анализа социальных сетей в R (уроки Стэнфордского университета): путаница с объектом-графиком / классом сети

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

http://sna.stanford.edu/lab.php?l=1

Первые части довольно просты, и я понимаю большую часть того, что происходит. Но как только я пытаюсь добавить атрибуты вершин к графу (строка 236 и далее), я сталкиваюсь с проблемами с только что созданным графическим объектом «krack_full». Запускаем это ...:

for (i in V(krack_full)) {
    for (j in names(attributes)) {
        krack_full <- set.vertex.attribute(krack_full, 
                                           j, 
                                           index = i, 
                                           attributes[i + 1, j])
    }
}

... возвращает это:

Error in set.vertex.attribute(krack_full, j, index = i, attributes[i +  : 
  unused argument (index = i)

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

attributes = cbind(1:length(attributes[,1]), attributes)
krack_full <- graph.data.frame(d = krack_full_nonzero_edges, 
+ vertices = attributes) 

Кажется, что это работает нормально - за исключением того, что он буквально создает атрибут с именем "(1: length (attributes [, 1])" ...

> summary(krack_full)
IGRAPH DN-- 21 232 -- 
attr: name (v/c), 1:length(attributes[, 1]) (v/n), AGE (v/n), TENURE (v/n), LEVEL (v/n), DEPT
  (v/n), advice_tie (e/n), friendship_tie (e/n), reports_to_tie (e/n)

Итак, все уже и так странно. И, наконец, когда я пытаюсь получить атрибуты вершины на следующем шаге, я сталкиваюсь с некоторыми ошибками, касающимися класса объекта:

> get.vertex.attribute(krack_full, 'AGE')
Error in get.vertex.attribute(krack_full, "AGE") : 
  get.vertex.attribute requires an argument of class network.
> get.vertex.attribute(krack_full, 'TENURE')
Error in get.vertex.attribute(krack_full, "TENURE") : 
  get.vertex.attribute requires an argument of class network.
> get.vertex.attribute(krack_full, 'LEVEL')
Error in get.vertex.attribute(krack_full, "LEVEL") : 
  get.vertex.attribute requires an argument of class network.
> get.vertex.attribute(krack_full, 'DEPT')
Error in get.vertex.attribute(krack_full, "DEPT") : 
  get.vertex.attribute requires an argument of class network.

... С этого момента почти ничего не работает так, как я ожидал. Поэтому я подозреваю, что объект графика "krack_full", в который были импортированы данные, почему-то не такой, каким должен быть ...?

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

Большое Вам спасибо.


person Markus D    schedule 08.07.2013    source источник
comment
Если вы следуете командам, изложенным в учебнике, и они не работают, вам следует связаться с разработчиками учебника.   -  person Scott Ritchie    schedule 08.07.2013


Ответы (2)


Я сильно подозреваю, что руководство, которому вы пытаетесь следовать, было разработано для igraph версии 0.5.4 или более ранней. В то время вершины и ребра в объекте igraph индексировались с нуля вместо единицы, и, судя по следующему комментарию в руководстве, в учебнике это учитывается:

# IMPORTANT NOTE: Unlike in most languages, R objects are numbered
# from 1 instead of 0, so if you want the first element in a
# vector, you would reference it by vector_name[1]. HOWEVER,
# igraph objects are numbered starting from 0. This can lead to 
# lots of confusion, since it's not always obvious at first which 
# objects are native to R and which belong to igraph.

Начиная с igraph 0.6, это больше не так; вершины и ребра в R-интерфейсе igraph индексируются с 1, как и любой другой хорошо управляемый R-объект. Здесь у вас есть два варианта (помимо того, что вы просите авторов руководства обновить его до igraph 0.6):

  1. Вы можете изменить команды в руководстве, чтобы убедиться, что индекс каждой вершины и ребра начинается с 1; то есть, если они где-то вычли 1 из индексов по какой-то причине, просто опустите вычитание, и аналогично, если они где-то добавили 1 в индексы, опустите сложение. Это также может быть хорошим способом проверить, действительно ли вы понимаете, что делаете :)

  2. Используйте пакет igraph0 вместо igraph. Пакет igraph0 идентичен пакету igraph, но использует индексирование с нуля, чтобы гарантировать, что старые коды igraph по-прежнему работают в течение переходного периода. Однако вам следует продолжать использовать igraph для новых аналитических проектов.

person Tamás    schedule 08.07.2013
comment
Великолепно, это имело смысл. Извините, что не обратил внимание на номера версий. Большое спасибо за объяснение. Удаление дополнений заставило его работать в igraph 0.6. И если его не трогать, он одинаково хорошо работает в igraph0. - person Markus D; 09.07.2013

Для функции

get.vertex.attribute 

попробуйте новую функцию

vertex_attr 

вместо

person user3357059    schedule 23.12.2015