我想在图表上应用我的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'类型的向量
有什么帮助吗?
我只需要修改ranking_class函数,将$id
键添加到每个V(g)。