2015-04-28 29 views
1

我想知道如何找到安打R.函數,下面是我的代碼:如何獲得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

你在找這個? http://igraph.org/r/doc/kleinberg.html –

回答

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 
+0

非常感謝你的先生。 –