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==