я работаю с igraph
пакетом, и я пытаюсь построить функцию, которая вычисляет количество внутри сообщества ребер различной реализации алгоритма. Я пытаюсь объединить все внутри функции, даже функции обнаружения сообщества алгоритмов. Например:R - функция, которая условно называют еще функции
library("igraph")
intra.edges<-function(G,algorithm) {
if(algorithm==1){
Mod<-cluster_louvain(G)}
if(algoritmo==2){
Mod<-cluster_edge_betweenness(G)}
if(algoritmo==3){
Mod<-cluster_walktrap(G)}
Com<-as.data.frame(sizes(Mod))
NoCom<-as.vector(Com$Community.sizes)
vert<-NULL
for(i in 1:length(NoCom)){
M<-which(membership(Mod)==i)
sg<-induced.subgraph(G,M)
c.ec<-ecount(sg)
vert<-c.ec
}
intra<-data.frame(Com,vert)
print(intra)
}
Когда я пытаюсь выполнить функцию, она работает неправильно. Например:
Когда я бегу:
G <- graph.famous("Zachary")
intra.edges(G,1)
я получаю:
Community.sizes Freq vert
1 9 6
2 7 6
3 9 6
4 4 6
5 5 6
И когда я бегу intra.edges(G,2)
или intra.edges(G,3)
я получаю тот же результат.
Кроме того, не все компоненты с сетью имеют шесть вершин, то только в одном компоненте.
Вы используете '<-' для проверки равенства внутри вашей функции. Вы должны использовать '=='. '<-' - оператор присваивания. – dash2
@ dash2 Вы правы, но в столбце 'vert' я продолжаю получать одинаковые значения. Благодаря! – Dan
Вы назначаете 'vert' несколько раз в цикле. Каждый раз, когда он перезаписывает предыдущее задание. Вам может понадобиться нечто вроде 'vert [i] <- c.ec'. Я подозреваю, что вам, возможно, придется изучить некоторые основы R, прежде чем делать это. – dash2