我想知道如何在R中找到HITS函数。这是我的代码:
library(igraph)
library(proxy)
A <- matrix(c(0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0),
nrow=6, ncol=6, byrow=TRUE)
G <- graph.adjacency(A, mode=c("directed"), weighted=NULL)
kmax <- 6
op <- HITS(G,kmax)
以下是我遇到的错误:
Error in t.default(adj) : argument is not a matrix
我编写了上面提到的HITS
函数,但我不知道如何在大型矩阵的循环函数中实现它。
HITS<-function(g,k)
{
adj <- get.adjacency(g)
nodes <- dim(adj)[1]
auth <- c(rep(1,nodes))
hub <- c(rep(1,nodes))
for(i in 1:k){
t_adj <- t(adj)
auth <- t_adj%*%hub
hub <- adj%*%auth
sum_sq_auth <- sum(auth*auth)
sum_sq_hub <- sum(hub*hub)
auth <- auth/sqrt(sum_sq_auth)
hub <- hub/sqrt(sum_sq_hub)
}
result <- c(auth,hub)
return(result)
}
答案 0 :(得分:0)
您可能拥有sparsematrices
选项TRUE
。在调用sparse=FALSE
时将其明确设置为get.adjacency
以获取完整矩阵而不是稀疏矩阵。
> t(get.adjacency(G, sparse=F))
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 0 1 0 0 0 0
[2,] 1 0 1 0 1 0
[3,] 1 1 0 1 1 1
[4,] 0 1 0 0 0 0
[5,] 0 1 0 1 0 0
[6,] 0 1 0 0 0 0
否则,如果您打算使用大型图表和稀疏矩阵,请安装并加载Matrix
库as recommended in the docs。
> library(Matrix)
> t(get.adjacency(G))
6 x 6 sparse Matrix of class "dgCMatrix"
[1,] . 1 . . . .
[2,] 1 . 1 . 1 .
[3,] 1 1 . 1 1 1
[4,] . 1 . . . .
[5,] . 1 . 1 . .
[6,] . 1 . . . .
加载Matrix
包后,HITS
算法按原样运行:
> HITS(G, 6)
[[1]]
6 x 1 Matrix of class "dgeMatrix"
[,1]
[1,] 0.2378004
[2,] 0.3204131
[3,] 0.7613633
[4,] 0.2378004
[5,] 0.3847263
[6,] 0.2378004
[[2]]
6 x 1 Matrix of class "dgeMatrix"
[,1]
[1,] 0.3874860
[2,] 0.6660588
[3,] 0.1147701
[4,] 0.4105226
[5,] 0.3874860
[6,] 0.2727159