library(dplyr)
library(tidyr)
library(stringr)
library(ggplot2)
theme_set(theme_bw())
pkgs <- available.packages() %>%
as.data.frame() %>%
tbl_df()
builtin <- c("stats", "methods", "utils", "graphics")
requirements <- pkgs %>%
unite(Requires, Depends, Imports, Suggests, sep = ",") %>%
transmute(Package = as.character(Package),
Requires = as.character(Requires)) %>%
unnest(Requires = str_split(Requires, ",")) %>%
mutate(Requires = str_replace(Requires, "\n", "")) %>%
mutate(Requires = str_trim(str_replace(Requires, "\\(.*", ""))) %>%
filter(!(Requires %in% c("R", "NA", "", builtin)))
package_info <- requirements %>%
count(Package = Requires) %>%
rename(NRequiredBy = n) %>%
left_join(count(requirements, Package)) %>%
rename(NRequires = n) %>%
replace_na(list(NRequires = 0))
library(widyr)
correlations <- requirements %>%
group_by(Requires) %>%
filter(n() >= 20) %>%
ungroup() %>%
pairwise_cor(Requires, Package, sort = TRUE)
correlations
## # A tibble: 64,262 x 3
## item1 item2 correlation
## <chr> <chr> <dbl>
## 1 R.oo R.methodsS3 0.9031723
## 2 R.methodsS3 R.oo 0.9031723
## 3 doParallel foreach 0.7356237
## 4 foreach doParallel 0.7356237
## 5 timeDate timeSeries 0.7084297
## 6 timeSeries timeDate 0.7084297
## 7 gWidgetsRGtk2 gWidgets 0.6974278
## 8 gWidgets gWidgetsRGtk2 0.6974278
## 9 ergm network 0.6336438
## 10 network ergm 0.6336438
## # ... with 64,252 more rows
library(igraph)
library(ggraph)
cors <- correlations %>%
filter(correlation > .2)
vertices <- package_info %>%
filter(Package %in% cors$item1 |
Package %in% cors$item2)
set.seed(2016)
graph_from_data_frame(cors, directed = FALSE, vertices) %>%
ggraph(layout = "fr") +
geom_edge_link(aes(edge_width = correlation, edge_alpha = correlation)) +
geom_node_point(aes(size = NRequiredBy), color = "skyblue", show.legend = FALSE) +
geom_node_text(aes(label = name), size = 3, check_overlap = TRUE, vjust = 1, hjust = 1) +
scale_size_continuous(range = c(.5, 10)) +
scale_edge_width(range = c(.5, 3)) +
ggforce::theme_no_axes() +
theme(legend.position = "none")
