Title: | A Consistent and Intuitive Platform to Explore the Dependencies of Packages on the Comprehensive R Archive Network Like Repositories |
---|---|
Description: | Interactively explore various dependencies of a package(s) (on the Comprehensive R Archive Network Like repositories) and perform analysis using tidy philosophy. Most of the functions return a 'tibble' object (enhancement of 'dataframe') which can be used for further analysis. The package offers functions to produce 'network' and 'igraph' dependency graphs. The 'plot' method produces a static plot based on 'ggnetwork' and 'plotd3' function produces an interactive D3 plot based on 'networkD3'. |
Authors: | KS Srikanth [aut, cre], Singh Nikhil [aut] |
Maintainer: | KS Srikanth <[email protected]> |
License: | GPL-3 |
Version: | 0.2.3 |
Built: | 2024-10-26 03:25:39 UTC |
Source: | https://github.com/talegari/pkggraph |
Interactively explore various dependencies of a package(s) (on the Comprehensive R Archive Network Like repositories) and perform analysis using tidy philosophy. Most of the functions return a 'tibble' object (enhancement of 'dataframe') which can be used for further analysis. The package offers functions to produce 'network' and 'igraph' dependency graphs. The 'plot' method produces a static plot based on 'ggnetwork' and 'plotd3' function produces an interactive D3 plot based on 'networkD3'.
See the vignette for further details
Maintainer: KS Srikanth [email protected]
Authors:
Singh Nikhil [email protected]
Useful links:
Check whether pkg_1 has a dependency on pkg_2
pkg_1 %depends% pkg_2
pkg_1 %depends% pkg_2
pkg_1 |
a package name |
pkg_2 |
a package name |
TRUE or FALSE
Srikanth KS
pkggraph::init(local = TRUE) "dplyr" %depends% "tibble"
pkggraph::init(local = TRUE) "dplyr" %depends% "tibble"
Check whether pkg_1 has a dependency on pkg_2
pkg_1 %enhances% pkg_2
pkg_1 %enhances% pkg_2
pkg_1 |
a package name |
pkg_2 |
a package name |
TRUE or FALSE
Srikanth KS
pkggraph::init(local = TRUE) "dplyr" %enhances% "tibble"
pkggraph::init(local = TRUE) "dplyr" %enhances% "tibble"
Check whether pkg_1 has a dependency on pkg_2
pkg_1 %imports% pkg_2
pkg_1 %imports% pkg_2
pkg_1 |
a package name |
pkg_2 |
a package name |
TRUE or FALSE
Srikanth KS
pkggraph::init(local = TRUE) "dplyr" %imports% "tibble"
pkggraph::init(local = TRUE) "dplyr" %imports% "tibble"
Check whether pkg_1 has a dependency on pkg_2
pkg_1 %linkingto% pkg_2
pkg_1 %linkingto% pkg_2
pkg_1 |
a package name |
pkg_2 |
a package name |
TRUE or FALSE
Srikanth KS
pkggraph::init(local = TRUE) "dplyr" %linkingto% "tibble"
pkggraph::init(local = TRUE) "dplyr" %linkingto% "tibble"
Check whether a package has a recursive dependency on the other
pkg_1 %relies% pkg_2
pkg_1 %relies% pkg_2
pkg_1 |
(string) A package name |
pkg_2 |
(string) A package name |
(flag) TRUE, if 'pkg_1' ‘relies' on ’pkg_2'
Srikanth KS
pkggraph::init(local = TRUE) "dplyr" %relies% "tibble"
pkggraph::init(local = TRUE) "dplyr" %relies% "tibble"
Check whether pkg_1 has a dependency on pkg_2
pkg_1 %suggests% pkg_2
pkg_1 %suggests% pkg_2
pkg_1 |
a package name |
pkg_2 |
a package name |
TRUE or FALSE
Srikanth KS
pkggraph::init(local = TRUE) "dplyr" %suggests% "tibble"
pkggraph::init(local = TRUE) "dplyr" %suggests% "tibble"
(tibble) A tibble with three columns: 'pkg_1', 'relation' and 'pkg_2'. Every row defines a dependency. This is computed for all packages in 'packmeta'
deptable
deptable
An object of class tbl_df
(inherits from tbl
, data.frame
) with 61154 rows and 3 columns.
Get all dependencies
get_all_dependencies(packages, level = 1L, relation = c("Depends", "Imports", "LinkingTo", "Suggests", "Enhances"), strict = FALSE, ignore = c("datasets", "utils", "grDevices", "graphics", "stats", "methods"))
get_all_dependencies(packages, level = 1L, relation = c("Depends", "Imports", "LinkingTo", "Suggests", "Enhances"), strict = FALSE, ignore = c("datasets", "utils", "grDevices", "graphics", "stats", "methods"))
packages |
(non-empty character vector) Package names |
level |
(positive integer, Default = 1L) Depth of recursive dependency |
relation |
(character vector) Types of relations. Must be a subset of c("Depends", "Imports", "LinkingTo", "Suggests", "Enhances") |
strict |
(logical, Default: TRUE) Whether to consider all packages (alternately only 'relation' specific packages) when computing dependencies for the next level |
ignore |
package names to ignore |
A tibble with three columns: 'pkg_1', 'relation' and 'pkg_2'
Srikanth KS
pkggraph::init(local = TRUE) # general use pkggraph::get_all_dependencies("mlr") # specify two levels pkggraph::get_all_dependencies("mlr", level = 2) # specify relation(s) pkggraph::get_all_dependencies("mlr", level = 2, relation = "Imports") # setting strict to TRUE to only consider 'Imports' of the previous level pkggraph::get_all_dependencies("mlr" , level = 2 , relation = "Imports" , strict = TRUE)
pkggraph::init(local = TRUE) # general use pkggraph::get_all_dependencies("mlr") # specify two levels pkggraph::get_all_dependencies("mlr", level = 2) # specify relation(s) pkggraph::get_all_dependencies("mlr", level = 2, relation = "Imports") # setting strict to TRUE to only consider 'Imports' of the previous level pkggraph::get_all_dependencies("mlr" , level = 2 , relation = "Imports" , strict = TRUE)
Get all reverse dependencies
get_all_reverse_dependencies(packages, level = 1L, relation = c("Depends", "Imports", "LinkingTo", "Suggests", "Enhances"), strict = FALSE, ignore = c("datasets", "utils", "grDevices", "graphics", "stats", "methods"))
get_all_reverse_dependencies(packages, level = 1L, relation = c("Depends", "Imports", "LinkingTo", "Suggests", "Enhances"), strict = FALSE, ignore = c("datasets", "utils", "grDevices", "graphics", "stats", "methods"))
packages |
(non-empty character vector) Package names |
level |
(positive integer, Default = 1L) Depth of recursive dependency |
relation |
(character vector) Types of relations. Must be a subset of c("Depends", "Imports", "LinkingTo", "Suggests", "Enhances") |
strict |
(logical, Default: TRUE) Whether to consider all packages (alternately only 'relation' specific packages) when computing dependencies for the next level |
ignore |
package names to ignore |
A tibble with three columns: 'pkg_1', 'relation' and 'pkg_2'
Srikanth KS
pkggraph::init(local = TRUE) # general use pkggraph::get_all_reverse_dependencies("mlr") # specify two levels pkggraph::get_all_reverse_dependencies("mlr", level = 2) # specify relation(s) pkggraph::get_all_reverse_dependencies("mlr", level = 2, relation = "Imports") # setting strict to TRUE to only consider 'Imports' of the previous level pkggraph::get_all_reverse_dependencies("mlr" , level = 2 , relation = "Imports" , strict = TRUE)
pkggraph::init(local = TRUE) # general use pkggraph::get_all_reverse_dependencies("mlr") # specify two levels pkggraph::get_all_reverse_dependencies("mlr", level = 2) # specify relation(s) pkggraph::get_all_reverse_dependencies("mlr", level = 2, relation = "Imports") # setting strict to TRUE to only consider 'Imports' of the previous level pkggraph::get_all_reverse_dependencies("mlr" , level = 2 , relation = "Imports" , strict = TRUE)
Get dependencies
get_depends(packages, level = 1L)
get_depends(packages, level = 1L)
packages |
(non-empty character vector) Package names |
level |
(positive integer) Depth of recursive dependency |
A tibble with three columns: 'pkg_1', 'relation' and 'pkg_2'
Srikanth KS
get_depends
, get_imports
,
get_linkingto
, get_suggests
,
get_enhances
, get_all_dependencies
,
get_reverse_depends
pkggraph::init(local = TRUE) pkggraph::get_depends("glmnet")
pkggraph::init(local = TRUE) pkggraph::get_depends("glmnet")
Get dependencies
get_enhances(packages, level = 1L)
get_enhances(packages, level = 1L)
packages |
(non-empty character vector) Package names |
level |
(positive integer) Depth of recursive dependency |
A tibble with three columns: 'pkg_1', 'relation' and 'pkg_2'
Srikanth KS
get_depends
, get_imports
,
get_linkingto
, get_suggests
,
get_enhances
, get_all_dependencies
,
get_reverse_enhances
pkggraph::init(local = TRUE) pkggraph::get_enhances("bigmemory")
pkggraph::init(local = TRUE) pkggraph::get_enhances("bigmemory")
Get dependencies
get_imports(packages, level = 1L)
get_imports(packages, level = 1L)
packages |
(non-empty character vector) Package names |
level |
(positive integer) Depth of recursive dependency |
A tibble with three columns: 'pkg_1', 'relation' and 'pkg_2'
Srikanth KS
get_depends
, get_imports
,
get_linkingto
, get_suggests
,
get_enhances
, get_all_dependencies
,
get_reverse_imports
pkggraph::init(local = TRUE) pkggraph::get_imports("dplyr")
pkggraph::init(local = TRUE) pkggraph::get_imports("dplyr")
Get dependencies
get_linkingto(packages, level = 1L)
get_linkingto(packages, level = 1L)
packages |
(non-empty character vector) Package names |
level |
(positive integer) Depth of recursive dependency |
A tibble with three columns: 'pkg_1', 'relation' and 'pkg_2'
Srikanth KS
get_depends
, get_imports
,
get_linkingto
, get_suggests
,
get_enhances
, get_all_dependencies
,
get_reverse_linkingto
pkggraph::init(local = TRUE) pkggraph::get_linkingto("tibble")
pkggraph::init(local = TRUE) pkggraph::get_linkingto("tibble")
Obtain dependencies and reverse dependencies of packages at a given depth of recursion
get_neighborhood(packages, level = 1L, relation = c("Depends", "Imports", "LinkingTo", "Suggests", "Enhances"), strict = FALSE, interconnect = TRUE, ignore = c("datasets", "utils", "grDevices", "graphics", "stats", "methods"))
get_neighborhood(packages, level = 1L, relation = c("Depends", "Imports", "LinkingTo", "Suggests", "Enhances"), strict = FALSE, interconnect = TRUE, ignore = c("datasets", "utils", "grDevices", "graphics", "stats", "methods"))
packages |
(non-empty character vector) Package names |
level |
(positive integer, Default: 1L) Depth of recursive dependency |
relation |
(character vector) Types of relations. Must be a subset of c("Depends", "Imports", "LinkingTo", "Suggests", "Enhances") |
strict |
(logical, Default: TRUE) Whether to consider all packages (alternately only 'relation' specific packages) when computing dependencies for the next level |
interconnect |
(flag, Default: TRUE) Whether to capture dependency among packages (of a given level) of the next level (See examples) |
ignore |
package names to ignore |
A tibble with three columns: 'pkg_1', 'relation' and 'pkg_2'
Srikanth KS
neighborhood_graph
,
make_neighborhood_graph
# explore first level dependencies pkggraph::init(local = TRUE) pkggraph::get_neighborhood("caret") # explore second level dependencies pkggraph::get_neighborhood("caret", level = 2) # explore second level dependencies without # considering dependencies from third level pkggraph::get_neighborhood("caret", level = 2, interconnect = FALSE) # explore first level dependencies of multiple packages # and consider second level dependencies get_neighborhood(c("caret", "mlr")) # get 'imports' specific neighborhood of 'mlr' package with strict = TRUE get_neighborhood("mlr" , level = 2 , strict = TRUE , interconnect = FALSE , relation = "Imports") # get 'imports' specific neighborhood of 'mlr' package with strict = FALSE get_neighborhood("mlr" , level = 2 , strict = FALSE , interconnect = FALSE , relation = "Imports")
# explore first level dependencies pkggraph::init(local = TRUE) pkggraph::get_neighborhood("caret") # explore second level dependencies pkggraph::get_neighborhood("caret", level = 2) # explore second level dependencies without # considering dependencies from third level pkggraph::get_neighborhood("caret", level = 2, interconnect = FALSE) # explore first level dependencies of multiple packages # and consider second level dependencies get_neighborhood(c("caret", "mlr")) # get 'imports' specific neighborhood of 'mlr' package with strict = TRUE get_neighborhood("mlr" , level = 2 , strict = TRUE , interconnect = FALSE , relation = "Imports") # get 'imports' specific neighborhood of 'mlr' package with strict = FALSE get_neighborhood("mlr" , level = 2 , strict = FALSE , interconnect = FALSE , relation = "Imports")
Get reverse dependencies
get_reverse_depends(packages, level = 1L)
get_reverse_depends(packages, level = 1L)
packages |
(non-empty character vector) Package names |
level |
(positive integer) Depth of recursive dependency |
A tibble with three columns: 'pkg_1', 'relation' and 'pkg_2'
Srikanth KS
get_reverse_depends
, get_reverse_imports
,
get_reverse_linkingto
, get_reverse_suggests
,
get_reverse_enhances
, get_all_reverse_dependencies
,
get_depends
pkggraph::init(local = TRUE) pkggraph::get_reverse_depends("utils")
pkggraph::init(local = TRUE) pkggraph::get_reverse_depends("utils")
Get reverse dependencies
get_reverse_enhances(packages, level = 1L)
get_reverse_enhances(packages, level = 1L)
packages |
(non-empty character vector) Package names |
level |
(positive integer) Depth of recursive dependency |
A tibble with three columns: 'pkg_1', 'relation' and 'pkg_2'
Srikanth KS
get_reverse_depends
,
get_reverse_imports
, get_reverse_linkingto
,
get_reverse_suggests
, get_reverse_enhances
,
get_all_reverse_dependencies
, get_enhances
pkggraph::init(local = TRUE) pkggraph::get_reverse_enhances("synchronicity")
pkggraph::init(local = TRUE) pkggraph::get_reverse_enhances("synchronicity")
Get reverse dependencies
get_reverse_imports(packages, level = 1L)
get_reverse_imports(packages, level = 1L)
packages |
(non-empty character vector) Package names |
level |
(positive integer) Depth of recursive dependency |
A tibble with three columns: 'pkg_1', 'relation' and 'pkg_2'
Srikanth KS
get_reverse_depends
,
get_reverse_imports
, get_reverse_linkingto
,
get_reverse_suggests
, get_reverse_enhances
,
get_all_reverse_dependencies
, get_imports
pkggraph::init(local = TRUE) pkggraph::get_reverse_imports("Rcpp")
pkggraph::init(local = TRUE) pkggraph::get_reverse_imports("Rcpp")
Get reverse dependencies
get_reverse_linkingto(packages, level = 1L)
get_reverse_linkingto(packages, level = 1L)
packages |
(non-empty character vector) Package names |
level |
(positive integer) Depth of recursive dependency |
A tibble with three columns: 'pkg_1', 'relation' and 'pkg_2'
Srikanth KS
get_reverse_depends
,
get_reverse_imports
, get_reverse_linkingto
,
get_reverse_suggests
, get_reverse_enhances
,
get_all_reverse_dependencies
, get_linkingto
pkggraph::init(local = TRUE) pkggraph::get_reverse_linkingto("BH")
pkggraph::init(local = TRUE) pkggraph::get_reverse_linkingto("BH")
Get reverse dependencies
get_reverse_suggests(packages, level = 1L)
get_reverse_suggests(packages, level = 1L)
packages |
(non-empty character vector) Package names |
level |
(positive integer) Depth of recursive dependency |
A tibble with three columns: 'pkg_1', 'relation' and 'pkg_2'
Srikanth KS
get_reverse_depends
, get_reverse_imports
,
get_reverse_linkingto
, get_reverse_suggests
,
get_reverse_enhances
, get_all_reverse_dependencies
,
get_suggests
pkggraph::init(local = TRUE) pkggraph::get_reverse_suggests("purrr")
pkggraph::init(local = TRUE) pkggraph::get_reverse_suggests("purrr")
Get dependencies
get_suggests(packages, level = 1L)
get_suggests(packages, level = 1L)
packages |
(non-empty character vector) Package names |
level |
(positive integer) Depth of recursive dependency |
A tibble with three columns: 'pkg_1', 'relation' and 'pkg_2'
Srikanth KS
get_depends
, get_imports
,
get_linkingto
, get_suggests
,
get_enhances
, get_all_dependencies
,
get_reverse_suggests
pkggraph::init(local = TRUE) pkggraph::get_suggests("knitr")
pkggraph::init(local = TRUE) pkggraph::get_suggests("knitr")
Initiate the package by loading the data into parent frame. This should be done as soon as the package is loaded or attached. This creates(rewrites) new variables 'deptable' and 'packmeta' to the environment where it is run from.
init(local = FALSE, repository = "CRAN", ...)
init(local = FALSE, repository = "CRAN", ...)
local |
(flag, default: FALSE) If
|
repository |
(character vector, Default: "CRAN") One among c("CRAN", "BioCsoft", "BioCann", "BioCexp", "BioCextra", "omegahat"). To use a repository not in this list, set 'repository' to NULL and pass named argument called 'repos' with a valid repository address. This will be passed as is to 'utils::available.packages()'. |
... |
Additional parameters to be passed to 'available.packages()' |
An invisible TRUE
Srikanth KS
Make a network or igraph graph object of dependencies and reverse dependencies from tibble output by functions like 'get_neighborhood', 'get_all_dependents'etc
make_neighborhood_graph(ndf, type = "igraph")
make_neighborhood_graph(ndf, type = "igraph")
ndf |
(tibble) Output by functions like 'get_neighborhood', 'get_all_dependents' etc |
type |
(string, Default: "igraph") Graph object type. Either "network" or "igraph" |
A network or igraph graph object
Srikanth KS
neighborhood_graph
,
get_neighborhood
pkggraph::init(local = TRUE) graph_object <- pkggraph::get_neighborhood("caret") pkggraph::make_neighborhood_graph(graph_object)
pkggraph::init(local = TRUE) graph_object <- pkggraph::get_neighborhood("caret") pkggraph::make_neighborhood_graph(graph_object)
Obtain a network or igraph graph object of dependencies and reverse dependencies of packages at a given depth of recursion
neighborhood_graph(packages, level = 1L, type = "igraph", relation = c("Depends", "Imports", "LinkingTo", "Suggests", "Enhances"), strict = FALSE, interconnect = TRUE, ignore = c("datasets", "utils", "grDevices", "graphics", "stats", "methods"))
neighborhood_graph(packages, level = 1L, type = "igraph", relation = c("Depends", "Imports", "LinkingTo", "Suggests", "Enhances"), strict = FALSE, interconnect = TRUE, ignore = c("datasets", "utils", "grDevices", "graphics", "stats", "methods"))
packages |
(non-empty character vector) Package names |
level |
(positive integer, Default: 1L) Depth of recursive dependency |
type |
(string, Default: "igraph") Graph object type. Either "network" or "igraph" |
relation |
(character vector) Types of graph edges. Must be a subset of c("Depends", "Imports", "LinkingTo", "Suggests", "Enhances") |
strict |
(logical, Default: TRUE) Whether to consider all packages (alternately only 'relation' specific packages) when computing dependencies for the next level |
interconnect |
(flag, Default: TRUE) Whether to capture dependency among packages (of a given level) of the next level (See examples) |
ignore |
package names to ignore |
A network or igraph graph object
Srikanth KS
get_neighborhood
,
make_neighborhood_graph
# explore first level dependencies pkggraph::init(local = TRUE) pkggraph::neighborhood_graph("caret") # explore second level dependencies of class network pkggraph::neighborhood_graph("caret", level = 2, type = "network") # get 'imports' specific neighborhood of 'mlr' package with strict = TRUE neighborhood_graph("mlr" , level = 2 , strict = TRUE , interconnect = FALSE , relation = "Imports") # get 'imports' specific neighborhood of 'mlr' package with strict = FALSE neighborhood_graph("mlr" , level = 2 , strict = FALSE , interconnect = FALSE , relation = "Imports")
# explore first level dependencies pkggraph::init(local = TRUE) pkggraph::neighborhood_graph("caret") # explore second level dependencies of class network pkggraph::neighborhood_graph("caret", level = 2, type = "network") # get 'imports' specific neighborhood of 'mlr' package with strict = TRUE neighborhood_graph("mlr" , level = 2 , strict = TRUE , interconnect = FALSE , relation = "Imports") # get 'imports' specific neighborhood of 'mlr' package with strict = FALSE neighborhood_graph("mlr" , level = 2 , strict = FALSE , interconnect = FALSE , relation = "Imports")
(A character matrix) Output of 'utils::available.packages'
packmeta
packmeta
An object of class matrix
with 11328 rows and 17 columns.
plot a pkggraph object
## S3 method for class 'pkggraph' plot(x, ...)
## S3 method for class 'pkggraph' plot(x, ...)
x |
plot object generated by |
... |
additional arguments (See details) |
background
: "black" or "white". Default is
'black'
nodeImportance
: "in", "out" or "both", in - Node will
be considered important(and increased size) if more incoming. out - Node
will be considered important if more outgoing. both - Node importance will
be calculated on both incoming and outgoing. True for all the nodes.
Default is 'both'
edgeLabel
: logical. TRUE if edge label has
to be shown. Default is FALSE
Nikhil Singh
neighborhood_graph
,
make_neighborhood_graph
, get_neighborhood
## Not run: pkggraph::init(local = TRUE) plot_obj <- pkggraph::neighborhood_graph("hash") plot(plot_obj) plot_obj <- pkggraph::neighborhood_graph("tidytext") plot(plot_obj , background = "white" , nodeImportance = "out") plot_obj <- pkggraph::neighborhood_graph(c("hash","tokenizers") , interconnect = FALSE ) plot(plot_obj, background = "white") ## End(Not run)
## Not run: pkggraph::init(local = TRUE) plot_obj <- pkggraph::neighborhood_graph("hash") plot(plot_obj) plot_obj <- pkggraph::neighborhood_graph("tidytext") plot(plot_obj , background = "white" , nodeImportance = "out") plot_obj <- pkggraph::neighborhood_graph(c("hash","tokenizers") , interconnect = FALSE ) plot(plot_obj, background = "white") ## End(Not run)
D3 network of a pkggraph object
plotd3(x, height = 500, width = 1000)
plotd3(x, height = 500, width = 1000)
x |
plot object generated by |
height |
parameter to change the height of the d3 plot. Default is 500 |
width |
parameter to change the width of the d3 plot. Default is 1000 |
Nikhil Singh
## Not run: pkggraph::init(local = TRUE) plot_obj <- pkggraph::neighborhood_graph("hash") pkggraph::plotd3(plot_obj) plot_obj <- pkggraph::neighborhood_graph(c("hash","tidytext")) pkggraph::plotd3(plot_obj, height = 750, width = 1200) plot_obj <- pkggraph::neighborhood_graph(c("hash","Matrix")) pkggraph::plotd3(plot_obj) ## End(Not run)
## Not run: pkggraph::init(local = TRUE) plot_obj <- pkggraph::neighborhood_graph("hash") pkggraph::plotd3(plot_obj) plot_obj <- pkggraph::neighborhood_graph(c("hash","tidytext")) pkggraph::plotd3(plot_obj, height = 750, width = 1200) plot_obj <- pkggraph::neighborhood_graph(c("hash","Matrix")) pkggraph::plotd3(plot_obj) ## End(Not run)
Captures recursive dependencies of these types: "Depends", "Imports", "LinkingTo"
relies(packages)
relies(packages)
packages |
(non-empty character vector) Package names |
(Named list) A name is the package name from 'packages'. A Value is a character vector of all packages which the package 'relies' (Captures recursive dependencies of these types: "Depends", "Imports", "LinkingTo")
Srikanth KS
pkggraph::init(local = TRUE) pkggraph::relies("tidytext")
pkggraph::init(local = TRUE) pkggraph::relies("tidytext")
Captures reverse recursive dependencies of these types: "Depends", "Imports", "LinkingTo"
reverse_relies(packages)
reverse_relies(packages)
packages |
(non-empty character vector) Package names |
(Named list) A name is the package name from 'packages'. A Value is a character vector of all packages which the package 'relies' (Captures reverse recursive dependencies of these types: "Depends", "Imports", "LinkingTo")
Srikanth KS
pkggraph::init(local = TRUE) pkggraph::reverse_relies("data.table")
pkggraph::init(local = TRUE) pkggraph::reverse_relies("data.table")