Inspired by Antonio Piccolboni

#devtools::install_github('RevolutionAnalytics/miniCRAN')
library(miniCRAN)
library(igraph)
library(magrittr)

Download matrix of available packages at specific date

MRAN <- "http://mran.revolutionanalytics.com/snapshot/2017-02-01/"
pdb <- MRAN %>%
  contrib.url(type = "source") %>%
  available.packages(type="source", filters = NULL)

Use miniCRAN to build a graph of package dependencies.

Note that this step takes a while, expect ~15-30 seconds.

g <- pdb[, "Package"] %>%
  makeDepGraph(availPkgs = pdb, suggests=FALSE, enhances=TRUE, includeBasePkgs = FALSE)

Use the page.rank algorithm in igraph and display Top 20 results.

pr <- g %>%
  page.rank(directed = FALSE) %>%
  use_series("vector") %>%
  sort(decreasing = TRUE) %>%
  as.matrix %>%
  set_colnames("page.rank")
pr2 <- as.data.frame(pr)
pr2

Build dependency graph of top packages

set.seed(42)
pr2 %>%
  head(25) %>%
  rownames %>%
  makeDepGraph(pdb) %>%
  plot(main="Top packages by page rank", cex=0.5, width=120)

LS0tDQp0aXRsZTogIkFuYWx5emUgUiBQYWNrYWdlcyBVc2luZyBQYWdlUmFuayBBbGdvcml0aG0iDQphdXRob3I6ICJIb2EgUXVhY2giDQpkYXRlOiAiRmVicnVhcnkgMiwgMjAxNyINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQogDQoNCkluc3BpcmVkIGJ5IFtBbnRvbmlvIFBpY2NvbGJvbmldKGh0dHA6Ly9waWNjb2xib25pLmluZm8vMjAxMi8wNS9lc3NlbnRpYWwtci1wYWNrYWdlcy5odG1sKQ0KDQpgYGB7ciBldmFsPVRSVUUsIGVjaG89VFJVRX0NCiNkZXZ0b29sczo6aW5zdGFsbF9naXRodWIoJ1Jldm9sdXRpb25BbmFseXRpY3MvbWluaUNSQU4nKQ0KbGlicmFyeShtaW5pQ1JBTikNCmxpYnJhcnkoaWdyYXBoKQ0KbGlicmFyeShtYWdyaXR0cikNCmBgYA0KDQpEb3dubG9hZCBtYXRyaXggb2YgYXZhaWxhYmxlIHBhY2thZ2VzIGF0IHNwZWNpZmljIGRhdGUgDQoNCmBgYHtyIGV2YWw9VFJVRSwgZWNobz1UUlVFfQ0KTVJBTiA8LSAiaHR0cDovL21yYW4ucmV2b2x1dGlvbmFuYWx5dGljcy5jb20vc25hcHNob3QvMjAxNy0wMi0wMS8iDQpwZGIgPC0gTVJBTiAlPiUNCiAgY29udHJpYi51cmwodHlwZSA9ICJzb3VyY2UiKSAlPiUNCiAgYXZhaWxhYmxlLnBhY2thZ2VzKHR5cGU9InNvdXJjZSIsIGZpbHRlcnMgPSBOVUxMKQ0KDQpgYGANCg0KVXNlIG1pbmlDUkFOIHRvIGJ1aWxkIGEgZ3JhcGggb2YgcGFja2FnZSBkZXBlbmRlbmNpZXMuDQoNCk5vdGUgdGhhdCB0aGlzIHN0ZXAgdGFrZXMgYSB3aGlsZSwgZXhwZWN0IH4xNS0zMCBzZWNvbmRzLg0KDQpgYGB7ciBldmFsPVRSVUUsIGVjaG89VFJVRX0NCmcgPC0gcGRiWywgIlBhY2thZ2UiXSAlPiUNCiAgbWFrZURlcEdyYXBoKGF2YWlsUGtncyA9IHBkYiwgc3VnZ2VzdHM9RkFMU0UsIGVuaGFuY2VzPVRSVUUsIGluY2x1ZGVCYXNlUGtncyA9IEZBTFNFKQ0KDQpgYGANCg0KVXNlIHRoZSBwYWdlLnJhbmsgYWxnb3JpdGhtIGluIGlncmFwaCBhbmQgZGlzcGxheSBUb3AgMjAgcmVzdWx0cy4NCg0KYGBge3IgZXZhbD1UUlVFLCBlY2hvPVRSVUV9DQpwciA8LSBnICU+JQ0KICBwYWdlLnJhbmsoZGlyZWN0ZWQgPSBGQUxTRSkgJT4lDQogIHVzZV9zZXJpZXMoInZlY3RvciIpICU+JQ0KICBzb3J0KGRlY3JlYXNpbmcgPSBUUlVFKSAlPiUNCiAgYXMubWF0cml4ICU+JQ0KICBzZXRfY29sbmFtZXMoInBhZ2UucmFuayIpDQoNCnByMiA8LSBhcy5kYXRhLmZyYW1lKHByKQ0KcHIyDQpgYGANCg0KDQpCdWlsZCBkZXBlbmRlbmN5IGdyYXBoIG9mIHRvcCBwYWNrYWdlcyANCg0KYGBge3IgZXZhbD1UUlVFLCBlY2hvPVRSVUV9DQpzZXQuc2VlZCg0MikNCnByMiAlPiUNCiAgaGVhZCgyNSkgJT4lDQogIHJvd25hbWVzICU+JQ0KICBtYWtlRGVwR3JhcGgocGRiKSAlPiUNCiAgcGxvdChtYWluPSJUb3AgcGFja2FnZXMgYnkgcGFnZSByYW5rIiwgY2V4PTAuNSkNCmBgYA0KDQoNCg==