Функция заканчивается не существует, хотя igraph был установлен

Я не могу продолжать писать код ниже из-за функции ends(graph, es, names = TRUE) (описание ).

Я установил igraph библиотеку, и я проверил все, но функция конца продолжает выдавать мне ошибку.

> library(igraph)
> setwd("Desktop")
> file <- "distance"
> con <- file(description=file, open="r")
> line <- read.table(con)
> data<-as.data.frame(line) 
> df <- graph.data.frame(d = data, directed = FALSE) #to convert data to a graph object
> edge<-sample(E(df),1)  # sample an edge randomly
> edge
  Edge sequence:
    e             
  e [16567] 5578 -- 6774
> ends(graph = g, es = 'e')[2]  #get the second vertex for edge e
Error in ends(graph = g, es = "e") : could not find function "ends"

Файл «distance» содержит данные, которые представляют собой набор ребер, упорядоченных в два столбца, каждая строка является ребром, а каждое значение в столбце представляет вершину как:

1 2
2 3
3 4

поэтому 1 2 - это ребро между вершинами 1 и 2.

Я хочу, чтобы эта функция получала инцидентные вершины случайно выбранного ребра, я искал библиотеки interent и R, но не могу найти аналогичную функцию или что-то подобное, что позволяет мне выбрать определенную вершину на ребре, вот аналогичная проблема ссылка но предлагаемое решение - использовать ends().

Не могли бы вы рассказать мне, почему я не могу использовать эту функцию или предложить другую функцию для той же цели. Спасибо заранее

ИЗМЕНИТЬ

Вроде проблема в версии igraph !! ends(graph,..) не определен в этой версии.

Мой вопрос: поскольку невозможно обновить версию igraph, есть ли другие функции для выбора определенной вершины на ребре? Спасибо


person Noah16    schedule 31.01.2018    source источник
comment
Какая у вас версия igraph? Может поделитесь sessionInfo()?   -  person Gregor Thomas    schedule 31.01.2018
comment
@Gregor, это igraph_0.7.1, я думаю, в этом причина !! эта функция не определена. Есть ли другие подобные функции? или какая-то функция, чтобы выделить определенную вершину из ребра?   -  person Noah16    schedule 31.01.2018
comment
Как насчет того, чтобы просто обновить свой пакет? Этой версии почти 4 года. В крупном обновлении 2015 года был представлен ends, и в 2017 году было хорошее обновление. В противном случае вы можете скопировать ends код из текущей версии и надеяться, что он работает, но нет никакой гарантии, что это будет.   -  person Gregor Thomas    schedule 31.01.2018
comment
@Gregor Раньше я пытался обновить его, но столкнулся с множеством проблем. Итак, теперь я ищу другую функцию, которая выполняла бы ту же работу, что и концы (график)   -  person Noah16    schedule 31.01.2018
comment
Я бы посоветовал отредактировать ваш вопрос так, чтобы заголовок и первые несколько строк отражали проблему, а не только последние две строки. Я не думаю, что это вызовет большой интерес, как сейчас. Кроме того, если вы последовали моему совету из предыдущего комментария о копировании функции ends, упомяните об этом и расскажите, как все прошло. (Конечно, если это сработает, вы можете просто закрыть вопрос.)   -  person Gregor Thomas    schedule 31.01.2018
comment
@Gregor, спасибо за заметку. На самом деле, в моем случае это слишком сложно обновить (igraph), это слишком сложная ситуация. Кроме того, мне не удалось использовать функцию концов, но я достиг своей цели другим способом, используя get.edgelist (graph) ... Спасибо за вашу помощь   -  person Noah16    schedule 31.01.2018
comment
Да, я так понимаю, вы не можете обновить igraph. Как я сказал выше, вы можете скопировать ends код из текущей версии и надеяться, что он сработает. Но я рад, что вы нашли решение.   -  person Gregor Thomas    schedule 31.01.2018


Ответы (1)


Просто чтобы помочь тем, кто столкнется с такими же проблемами ..

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

edges<-get.edgelist(df)
v1<-edges[edge,1]
v2<-edges[edge,2]
edge
Edge sequence:
              e             
e [8839] 1149 -- 1425
v1
[1] "1425"
v2
[1] "1149"

Это не лучшее решение, но оно решило мою проблему, поэтому, возможно, оно могло бы помочь другим новичкам, таким как я.

person Noah16    schedule 31.01.2018
comment
Или вы можете использовать идею вашего решения, чтобы создать функцию, заменяющую ends, как это ENDS = function(g, v) { get.edgelist(g)[v,] } - person G5W; 04.02.2018