如何在R工具中获取HITS功能?

How to get the HITS function in R tool?

我想知道如何在 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) 
}

您可能有 sparsematrices 选项 TRUE。在调用 get.adjacency 时明确将其设置为 sparse=FALSE 以获得完整矩阵而不是稀疏矩阵。

> 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