函数不适用于我的所有图形节点

问题描述 投票:0回答:1

我想在图表上应用我的Ranking_class函数。问题是它只在某些节点上工作,但不是全部*。这是代码:

ranking_class <- function(g)
for ( node in V(g) ) {

print(node)

NMI1 <- localcom_quality( node , g1 , mod_L , "nmi")

NMI2 <- localcom_quality( node , g1 , mod_R , "nmi")

NMI3 <- localcom_quality( node , g1 , mod_M , "nmi")

rma <- unlist(list("mod_L " = NMI1 , "mod_R" = NMI2 , "mod_M" = NMI3 ))

print(rma)

}

return(rma)

}  




localcom_quality<-function(target,g,mod,method){

bipartition<-compute_ego_partition(target,g,mod)

return(groundtruth_localcom_quality(g,bipartition,method))
}



groundtruth_localcom_quality<-function(g,bipartition,method="nmi"){

V(g)[id %in% bipartition$com]$egocom<-0

V(g)[id %in% bipartition$not_com]$egocom<-1

return(compare(V(g)$value,V(g)$egocom,method))
}




compute_ego_partition <- function(target , g , mod){
com <- local_com(target , g , mod)
not_com <- V(g)[!(id %in% com)]$id
res <-  list("com" = com , "not_com" = not_com)
return(res)
}



local_com <- function(target,g,mod){ 

 if(is.igraph(g) && target %in% V(g)){
C <-c()
B <-c(target)
S <-c(V(g)[neighbors(g,target)]$id)
Q <-0
new_Q <-0 
while (( length(S)>0) && (new_Q >= Q)){ 
  QS <- sapply(S , compute_quality , g , C , B , S , mod ) 
  new_Q <- max(QS) 
  if (new_Q >= Q){ 
    s_node <- S[which.max(QS)] 
    res <- update( s_node , g , C , B , S ) 
    C<-res$C 
    B<-res$B 
    S<-res$S 
    Q <- new_Q 
  } 
}

return (union(C,B))  

}else{

stop("Invalid Arguments")

}
}

因此,当我在图表g(Ranking_class(g1))上应用排名类时,它可以在fiew的第一个节点上运行并显示mod,但之后只需停止此错误:

as.vector(x,mode)出错:无法将'builtin'强制类型为'any'类型的向量

有什么帮助吗?

r igraph
1个回答
0
投票

我只需要修改ranking_class函数,将$id键添加到每个V(g)。

© www.soinside.com 2019 - 2024. All rights reserved.