---
title: "icesSAG Package Dependency Report"
output:
rmarkdown::html_vignette:
toc: true
vignette: >
%\VignetteIndexEntry{icesSAG Package Dependency Report}
%\VignetteEngine{knitr::rmarkdown}
%\VignetteEncoding{UTF-8}
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(
echo = FALSE
, warning=FALSE
, out.width='100%'
)
pkgnet:::silence_logger()
pkg <- "icesSAG"
base <- TRUE
pkgs_all <- installed.packages()
pkgs_avail <- available.packages(repos = "https://cloud.r-project.org")
rm(reporter)
reporter <- pkgnet::DependencyReporter$new(installed = TRUE) # has to be true, as we need non-cran packages
reporter$set_package(pkg_name = pkg)
```
## Dependency Network
This section analyzes the recursive package dependencies of **`r reporter$pkg_name`**.
```{r echo = FALSE, error = TRUE}
reporter$calculate_default_measures()
```
### Visualization
Nodes are packages. Edges point in the direction of dependence.
```{r echo = FALSE, error = TRUE}
plotDTnodes <- data.table::copy(reporter$nodes) # Don't modify original
plotDTnodes[, id := node]
plotDTnodes[, label := id]
pkgs <- pkgs_all[plotDTnodes$node, ]
repo <- sapply(pkgs[, "Package"], function(x) packageDescription(x)$Repository %||% NA)
repo[pkgs[, "Priority"] == "base"] <- "Base"
repo[pkgs[, "Priority"] == "recommended"] <- "Recommended"
plotDTnodes[, Repo := repo]
# colour nodes based on package type
plotDTnodes[, color := "red"]
plotDTnodes[Repo == "CRAN", color := "orange"]
plotDTnodes[Repo == "Base", color := "lightgreen"]
plotDTnodes[Repo == "Recommended", color := "lightblue"]
plotDTnodes[node == pkg, color := "steelblue"]
# colour or outline in dotted lines, nodes based on whether package is on CRAN or not
# colour based on package build status?
# extend to analyse a icesSAG analysis project, showing dependencies between packages and scripts
plotDTedges <- data.table::copy(reporter$edges) # Don't modify original
plotDTedges[, from := SOURCE]
plotDTedges[, to := TARGET]
plotDTedges[, color := "#848484"]
# remove base packages
if (!base) {
plotDTnodes <- plotDTnodes[Repo != "Base" | node == pkg]
plotDTedges <- plotDTedges[
SOURCE %in% plotDTnodes$node & TARGET %in% plotDTnodes$node
]
}
g <- visNetwork::visNetwork(
nodes = plotDTnodes,
edges = plotDTedges
) |>
visNetwork::visIgraphLayout(
layout = "layout_as_tree",
smooth = TRUE,
mode = "all",
flip.y = FALSE,
root = which(plotDTnodes$node == pkg)
) |>
visNetwork::visEdges(arrows = "to") |>
visNetwork::visOptions(
highlightNearest = list(
enabled = TRUE,
degree = nrow(plotDTnodes), # guarantee full path
algorithm = "hierarchical"
),
collapse = FALSE,
selectedBy = "Repo"
)
g
```
### Table
```{r error = TRUE}
reporter$get_summary_view()
```
---
```{r results="asis"}
cat(sprintf("This report built with **pkgnet v%s**.", packageVersion('pkgnet')))
```
[**pkgnet**](https://uptakeopensource.github.io/pkgnet/) is an open-source R package, copyright © 2017-2019 Uptake, made available under the 3-Clause BSD License.
```{r echo = FALSE}
pkgnet:::unsilence_logger()
```