Я пытаюсь построить матрицу смежности для веб-сети, чтобы определить наиболее популярный веб-сайт с помощью алгоритма PageRank.
Чтобы запустить алгоритм, мне нужно создать матрицу смежности из файла .txt, который содержит ссылки со страницы на страницу, что я и сделал с помощью пакета igraph следующим образом:
A_h = graph_from_data_frame(hollins)
A_h = as_adjacency_matrix(A_h)
Чтобы иметь возможность запустить алгоритм, мне нужно сначала убедиться, что ни одна страница не имеет всех 0, связывая страницу с самим собой.Чтобы сделать это, я использовал это для цикла:
for(i in 1:nrow(A_h)){
if(rowSums(A_h) == 0){
A_h[i,i] = 1}
Затем мне нужно нормализовать строки, убедившись, что записи строк в сумме составляют 1:
norm_A_h = A_h/rowSums(A_h)
Я пыталсяделать это на фиктивной простой матрице, и она работала хорошо:
T = matrix(c(0, 3, 4, 0, 8, 4, 0, 4, 5), nrow = 3, ncol = 3)
for(i in 1:nrow(T)){
if(rowSums(T) == 0){
T[i,i] = 1}
}
which(rowSums(A_h)==0)
T = T/rowSums(T)
Однако, когда я пытаюсь запустить его на разреженной матрице, похоже, что я все равно получаю все 0 строк после проверки:
which(rowSums(A_h)==0)
Есть идеи, почему он не работает с разреженной матрицей?