More metadata on these packages: CRAN links, version control links. Sorted by recent publish date to prioritize those that are actively maintained.
library(httr)
library(tools)
library(data.table)
if (requireNamespace("devtools", quietly=TRUE) && requireNamespace("BiocManager", quietly=TRUE)) {
cran_depends = devtools::revdep('data.table', 'Depends')
bioc_depends = devtools::revdep('data.table', 'Depends', bioconductor = TRUE)
} else {
cran_depends = package_dependencies("data.table", reverse=TRUE, which="Depends")$data.table
bioc_vr = '3.20'
bioc_db = available.packages(repos = file.path('http://bioconductor.org/packages', bioc_vr, 'bioc'))
bioc_depends = package_dependencies("data.table", bioc_db, reverse=TRUE, which="Depends")$data.table
}
desc_data <- function(package) {
repo = getOption('repos')["CRAN"]
desc_url <- file.path(repo, "web", "packages", package, "DESCRIPTION")
desc_file <- httr::content(httr::GET(desc_url), encoding = "UTF-8")
desc_conn <- rawConnection(desc_file, open = "r")
on.exit(close(desc_conn))
# based on very exhaustive GitHub CRAN mirror search of DESCRIPTION files
url_fields = c("URL", "URLNote", "BugReports", "Github")
desc = read.dcf(desc_conn, c("Package", "Date/Publication", "Version", url_fields))
repo_regex = ".*git(?:hub|lab)[a-zA-Z0-9._]+/([A-Za-z0-9._]+/[A-Za-z0-9._]+).*"
url = desc[,url_fields] |>
Filter(f = Negate(is.na)) |>
strsplit(",") |>
lapply(function(str) {
repo_like = grep(repo_regex, str, value=TRUE)
repo_like = grep("github.io", repo_like, value=TRUE, invert=TRUE)
gsub("/issues", "", trimws(repo_like))
}) |>
unlist() |>
unique()
out = data.table(
package = desc[,"Package"],
published_date = as.Date(as.POSIXct(desc[,"Date/Publication"])),
version = desc[,"Version"])
if (!length(url)) url = NA_character_
if (length(url) > 1L) {
# e.g. cellKey has a special BugReports repo
url = grep(package, url, fixed=TRUE, value=TRUE)
if (length(url) > 1L) stop("found more than one apparent URL for ", package)
}
out[, url := url]
out[]
}
cran_depends = rbindlist(lapply(cran_depends, desc_data))
writeLines(paste("- [ ]", cran_depends$package))
cran_depends[, package := sprintf('[%1$s](https://cran.r-project.org/web/packages/%1$s/index.html)', package)]
cran_depends[, url := fcase(
grepl("github", url), sprintf("[GH](%s)", url),
grepl("gitlab", url), sprintf("[GL](%s)", url),
!is.na(url), url
)]
setorder(cran_depends, -published_date)
setnames(cran_depends, c("Package", "Last CRAN Update", "Version", "URL"))
options(knitr.kable.NA = '')
knitr::kable(cran_depends)
writeLines(sprintf("- [ ] [%1$s](https://www.bioconductor.org/packages/%2$s/bioc/html/%1$s.html)", bioc_depends, bioc_vr))
CRAN + BioC:

I've only recently realized how bad
Depends:is, thanks to Jan's importing vignette. I just made its discouragement stronger : 51590bcWe could disallow Depends. This would also be beneficial to
cedta()'s awkward implementation on its last line where it needs to do the tryCatch just for packages which Depend; that line could be removed.But before we disallow Depends, we'd need to ask 69 CRAN packages to change from Depends to Imports. (Most revdeps already Import.) The longer we leave it, the greater the potential for new packages using Depends to be added to CRAN and the harder it will be to change.
Check when changed to Imports and published:
CRAN
Bioconductor
Details
More metadata on these packages: CRAN links, version control links. Sorted by recent publish date to prioritize those that are actively maintained.
These packages had previously used
Depends: data.tablebut either no longer do, or were removed from CRAN:edgeRunremoved from CRANEurosarcBayesremoved from CRANGenomicToolsremoved from CRANglmaagremoved from CRANhaploReconstructremoved from CRANQuantToolsremoved from CRANRbitcoinremoved from CRANRnetsremoved from CRANstrangerremoved from CRANttwaremoved from CRANList as code for easier maintenance of this list: