diff --git a/DESCRIPTION b/DESCRIPTION
index 47472a1..b72de73 100644
--- a/DESCRIPTION
+++ b/DESCRIPTION
@@ -17,3 +17,4 @@ Imports:
omopgenerics,
here
Config/roxygen2/version: 8.0.0
+RoxygenNote: 7.3.3
diff --git a/NAMESPACE b/NAMESPACE
index 8f00d47..63fde48 100644
--- a/NAMESPACE
+++ b/NAMESPACE
@@ -12,16 +12,27 @@ importFrom(CohortConstructor,requireIsFirstEntry)
importFrom(CohortConstructor,requireSex)
importFrom(CohortConstructor,requireTableIntersect)
importFrom(ParallelLogger,logInfo)
+importFrom(PatientProfiles,addConceptIntersectDate)
+importFrom(checkmate,assertChoice)
+importFrom(checkmate,assertDataFrame)
importFrom(checkmate,assertDirectoryExists)
+importFrom(checkmate,assertFileExists)
+importFrom(checkmate,assertTRUE)
importFrom(dplyr,collect)
importFrom(dplyr,filter)
+importFrom(dplyr,mutate)
+importFrom(dplyr,pick)
importFrom(dplyr,pull)
+importFrom(dplyr,rowwise)
importFrom(dplyr,select)
+importFrom(dplyr,select_if)
importFrom(glue,glue)
importFrom(here,here)
importFrom(omopgenerics,assertList)
-importFrom(omopgenerics,assertTable)
importFrom(omopgenerics,importConceptSetExpression)
importFrom(omopgenerics,newCodelist)
importFrom(omopgenerics,settings)
+importFrom(omopgenerics,validateCdmArgument)
+importFrom(omopgenerics,validateCohortArgument)
importFrom(stringr,str_detect)
+importFrom(tidyselect,any_of)
diff --git a/R/TNMRules.R b/R/TNMRules.R
new file mode 100644
index 0000000..62d003b
--- /dev/null
+++ b/R/TNMRules.R
@@ -0,0 +1,90 @@
+#' Documentation of TNM staging rules
+#'
+#' Internal auxiliary files used to determine cancer stage.
+#'
+#' @details
+#' The package stores three rule sets derived from UICC guidelines for the
+#' TNM staging system. The rules stored in these files are differentiated by
+#' cancer **site** (bladder, breast, colorectal, lung, oesophageal, prostate,
+#' skin), classification **type** (clinical, pathological, base) and
+#' classification **edition** (7th, 8th, unspecified). The files are:
+#'
+#' \enumerate{
+#' \item `tnm_concepts.csv`: contains information about the individual TNM
+#' components and their concept ids, differentiated by type and edition.
+#' There are \eqn{393} total concepts for \eqn{44} unique components:
+#' ```
+#' TX, T0, Tis, Ta, T1, T1a, T1b, T1c, T1mi, T2, T2a, T2b, T2c, T3, T3a,
+#' T3b, T4, T4a, T4b, T4c, T4d, NX, N0, N1, N1a, N1b, N1c, N1mi, N2, N2a,
+#' N2b, N2c, N3, N3a, N3b, N3c, M0, M1, M1a, M1b, M1c, M1c1, M1c2, M1d.
+#' ```
+#' These components have different versions according to:
+#' \itemize{
+#' \item Edition: \eqn{131} concepts for 7th, \eqn{131} for 8th, \eqn{131}
+#' for unspecified;
+#' \item Type: \eqn{132} concepts for base, \eqn{132} for clinical, \eqn{129}
+#' for pathological (the `M0` component is not valid in the pathological
+#' setting, for any of the editions).
+#' }
+#'
+#' \item `tnm_stage_mapping.csv`: contains the rules to determine the cancer
+#' stage based on a combination of individual TNM components, differentiated
+#' by cancer site, type (clinical, pathological, base) and by edition (7th,
+#' 8th, 9th). Each rule refers to a specific source page of the UICC guidelines.
+#'
+#' The currently available rules support the following concept categories.
+#'
+#' For `bladder` cancer:
+#' \itemize{
+#' \item Edition: 7th, 8th, 9th available;
+#' \item Type: only "base" is available, for all editions.
+#' }
+#' For `breast` cancer:
+#' \itemize{
+#' \item Edition: 7th, 8th, 9th available;
+#' \item Type: only "base" is available, for all editions.
+#' }
+#' For `colorectal` cancer:
+#' \itemize{
+#' \item Edition: 7th, 8th, 9th available;
+#' \item Type: only "base" is available, for all editions.
+#' }
+#' For `lung` cancer:
+#' \itemize{
+#' \item Edition: 7th, 8th, 9th available;
+#' \item Type: only "base" is available, for all editions.
+#' }
+#' For `oesophageal` cancer:
+#' \itemize{
+#' \item For 7th edition, only "base" type is available;
+#' \item For 8th edition, only "clinical" and "pathological" types are available but not "base".
+#' \item For 9th edition, only "clinical" and "pathological" types are available but not "base".
+#' }
+#' For `prostate` cancer:
+#' \itemize{
+#' \item For 7th edition, only "base" type is available;
+#' \item For 8th edition, only "clinical" type is available;
+#' \item For 9th edition, only "clinical" and "pathological" types are available but not "base".
+#' }
+#' For `skin` cancer:
+#' \itemize{
+#' \item For 7th edition, only "pathological" type is available;
+#' \item For 8th edition, only "clinical" and "pathological" types are available but not "base".
+#' \item For 9th edition, only "clinical" and "pathological" types are available but not "base".
+#' }
+#'
+#' \item `tnm_stage_shortcut_mapping.csv`: contains some more general rules to
+#' determine the cancer stage based on a subset of individual TNM components,
+#' differentiated by cancer site, type and edition. In fact, there are some
+#' special cases in which the value of one or two components
+#' is enough to determine the stage, independently of the others.
+#' Each rule refers to a specific source page of the UICC guidelines.
+#' }
+#'
+#' These files are meant for internal use and are not intended
+#' to be modified by users.
+#'
+#' @name tnm_rules_docs
+#' @source UICC_7th edition.pdf; UICC_8th edition.pdf corroborated by nhs/*.pdf; uicc/UICC_9th edition.pdf
+#' @keywords internal
+NULL
diff --git a/R/addStages.R b/R/addStages.R
index dc9cb38..b930fbf 100644
--- a/R/addStages.R
+++ b/R/addStages.R
@@ -1,23 +1,23 @@
#' `addStages()` to a cohort
#'
-#' It uses a codelist to date intersect with a cancer cohort.
+#' It uses a codelist to date intersect with a cancer cohort.
#' Imposes a predefined or custom set of rules to identify
#' summary stages.
#'
-#' @param cohort A cohort table with cancer patients from a
+#' @param cohort A cohort table with cancer patients from a
#' cdm reference object.
#' @param cdm A cdm reference object.
-#' @param cancer In character, the affected site, a choice of:
+#' @param cancer In character, the affected site, a choice of:
#' "bladder", "breast", "colorectal", "lung", "melanoma", "oesophagus"
#' and "prostate".
#' @param window to look up stages codes.
#' @param edition A choice of "unspecified", "7th" and "8th".
#' @param type A choice from "base", "clinical" or "pathological".
-#' @param order A choice from "first" or "last". If more that one code
+#' @param order A choice from "first" or "last". If more than one code
#' intersected, the order defines which code to intersect in the window.
-#' @param showTnm If TRUE, the cohort will show the date intersects
+#' @param showTnm If TRUE, the cohort will show the date intersects
#' for each matching code. Default FALSE.
-#' @importFrom omopgenerics validateCohortArgument validateCdmArgument assertList newCodelist
+#' @importFrom omopgenerics validateCohortArgument validateCdmArgument assertList newCodelist
#' @importFrom checkmate assertChoice assertFileExists assertTRUE assertDataFrame
#' @importFrom dplyr filter pull rowwise select_if mutate pick select
#' @importFrom PatientProfiles addConceptIntersectDate
@@ -35,28 +35,28 @@ addStages <- function(
order = "last",
showTnm = FALSE
) {
-
+
# Assert parameters ---------------------------------
cohort |>
omopgenerics::validateCohortArgument()
- cdm |>
+ cdm |>
omopgenerics::validateCdmArgument()
- window |>
+ window |>
omopgenerics::assertList()
- edition |>
+ edition |>
checkmate::assertChoice(
c("unspecified", "7th", "8th")
)
- type |>
+ type |>
checkmate::assertChoice(
c("base", "clinical", "pathological")
)
-
+
# Read stages rules data ----------------------------
tnm_files_data <- system.file(
"tnm_files",
package = "oncomop"
- ) |>
+ ) |>
list.files(
full.names = TRUE
) |>
@@ -69,17 +69,17 @@ addStages <- function(
.edition = edition,
.type = type
)
-
+
# Extract ruleset -----------------------------------
- ruleset <- tnm_files_data$tnm_stage_mapping |>
+ ruleset <- tnm_files_data$tnm_stage_mapping |>
extractStageRuleset(
.cancer = cancer,
.edition = edition,
.type = "base"
- )
-
+ )
+
# .addColumnRules() ---------------------------------
- # General function to analyse if it can be reused for
+ # General function to analyse if it can be reused for
# subtypes and progression
cancer_stage_cohort <- cohort |>
.addColumnRules(
@@ -93,10 +93,10 @@ addStages <- function(
nameStyle = "{concept_name}",
name = NULL,
ruleset = ruleset
- )
-
+ )
+
if (isFALSE(showTnm)) {
- cancer_stage_cohort |>
+ cancer_stage_cohort |>
dplyr::select(
cohort_definition_id,
subject_id,
@@ -110,13 +110,13 @@ addStages <- function(
}
readStagesRDS <- function(tnm_files) {
- tnm_files |>
- checkmate::assertFileExists() |>
- basename() |>
+ tnm_files |>
+ checkmate::assertFileExists() |>
+ basename() |>
identical(
c( "tnm_concepts.rds",
"tnm_stage_mapping.rds",
- "tnm_stage_shortcut_mapping.rds")) |>
+ "tnm_stage_shortcut_mapping.rds")) |>
checkmate::assertTRUE()
setNames(
lapply(tnm_files, readRDS),
@@ -131,16 +131,16 @@ extractStageRuleset <- function(
.type
) {
checkmate::assertDataFrame(tnm_stage_mapping)
- tnm_stage_mapping |>
+ tnm_stage_mapping |>
dplyr::filter(
edition == .edition
- ) |>
+ ) |>
dplyr::filter(
site == .cancer
- ) |>
+ ) |>
dplyr::filter(
stage_grouping_scope == .type
- ) |>
+ ) |>
dplyr::select(
rule_id, T, N, M, uicc_stage
)
@@ -157,10 +157,10 @@ createTNMCodelist <- function(
.data$classification_version == .edition,
.data$type == .type,
) |>
- dplyr::filter(
+ dplyr::filter(
!is.na(.data$concept_id)
- )
- tnm_codelist <- tnm_stages_concept |>
+ )
+ tnm_codelist <- tnm_stages_concept |>
dplyr::pull(
concept_id
) |> lapply(
@@ -169,7 +169,7 @@ createTNMCodelist <- function(
}
) |> setNames(
tnm_stages_concept$component_tnm
- ) |>
+ ) |>
omopgenerics::newCodelist()
return(tnm_codelist)
}
@@ -188,7 +188,7 @@ createTNMCodelist <- function(
ruleset
) {
omopgenerics::validateCohortArgument(cohort)
- cohort |>
+ cohort |>
PatientProfiles::addConceptIntersectDate(
conceptSet,
indexDate = "cohort_start_date",
@@ -199,7 +199,7 @@ createTNMCodelist <- function(
inObservation = TRUE,
nameStyle = "{concept_name}",
name = NULL
- ) |>
+ ) |>
.mapRules(ruleset)
}
@@ -210,29 +210,29 @@ createTNMCodelist <- function(
omopgenerics::validateCohortArgument(cohort)
checkmate::assertDataFrame(ruleset)
cohort |>
- dplyr::collect() |>
+ dplyr::collect() |>
dplyr::rowwise() |>
- dplyr::select_if(~ !all(is.na(.))) |>
+ dplyr::select_if(~ !all(is.na(.))) |>
dplyr::mutate(
cancer_stage = {
- rowStages <- dplyr::pick(tidyselect::any_of(tolower(unique(c(ruleset$T, ruleset$N, ruleset$M))))) |>
+ rowStages <- dplyr::pick(tidyselect::any_of(tolower(unique(c(ruleset$T, ruleset$N, ruleset$M))))) |>
dplyr::select_if(~ !any(is.na(.)))
stageCombination <- names(rowStages)
rowStageT <- stageCombination[names(rowStages) |> stringr::str_detect("t")]
rowStageN <- stageCombination[names(rowStages) |> stringr::str_detect("n")]
rowStageM <- stageCombination[names(rowStages) |> stringr::str_detect("m")]
- stage <- ruleset |>
+ stage <- ruleset |>
dplyr::select(
T, N, M, uicc_stage
- ) |>
+ ) |>
dplyr::filter(
tolower(T) == rowStageT,
tolower(N) == rowStageN,
tolower(M) == rowStageM,
- ) |>
+ ) |>
dplyr::pull(uicc_stage)
}
- )
+ )
}
filterStageConcepts <- function(
diff --git a/man/addStages.Rd b/man/addStages.Rd
index 7e95853..85f76b0 100644
--- a/man/addStages.Rd
+++ b/man/addStages.Rd
@@ -2,28 +2,40 @@
% Please edit documentation in R/addStages.R
\name{addStages}
\alias{addStages}
-\title{addCancerStages() information to a cohort}
+\title{\code{addStages()} to a cohort}
\usage{
addStages(
cohort,
cdm,
cancer,
- window = c(0, 0),
- edition = "eight",
+ window = list(c(0, 0)),
+ edition = "8th",
type = "base",
- order = "last"
+ order = "last",
+ showTnm = FALSE
)
}
\arguments{
-\item{cohort}{A cohort table from a cdm reference object.}
+\item{cohort}{A cohort table with cancer patients from a
+cdm reference object.}
-\item{cdm}{A cdm reference.}
+\item{cdm}{A cdm reference object.}
-\item{stageConcepts}{A concept-set list containing cancer
-stage concepts.}
+\item{cancer}{In character, the affected site, a choice of:
+"bladder", "breast", "colorectal", "lung", "melanoma", "oesophagus"
+and "prostate".}
-\item{ruleSet}{A set of rules in list format that
-corresponds to each element of the stageConcepts codelist.}
+\item{window}{to look up stages codes.}
+
+\item{edition}{A choice of "unspecified", "7th" and "8th".}
+
+\item{type}{A choice from "base", "clinical" or "pathological".}
+
+\item{order}{A choice from "first" or "last". If more that one code
+intersected, the order defines which code to intersect in the window.}
+
+\item{showTnm}{If TRUE, the cohort will show the date intersects
+for each matching code. Default FALSE.}
}
\value{
A cohort table containing the identified cancer stages.
diff --git a/man/saveTNMRules.Rd b/man/saveTNMRules.Rd
index 87262e8..a5903b6 100644
--- a/man/saveTNMRules.Rd
+++ b/man/saveTNMRules.Rd
@@ -4,7 +4,10 @@
\alias{saveTNMRules}
\title{Save TNM staging rules to RDS file}
\usage{
-saveTNMRules(path = here::here("extras"), results_path = here::here("inst"))
+saveTNMRules(
+ path = here::here("extras"),
+ results_path = system.file("tnm_files", package = "oncomop")
+)
}
\arguments{
\item{path}{Character directory where the original .csv files are stored.}
diff --git a/man/tnm_rules_docs.Rd b/man/tnm_rules_docs.Rd
new file mode 100644
index 0000000..1114ff4
--- /dev/null
+++ b/man/tnm_rules_docs.Rd
@@ -0,0 +1,95 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/TNMRules.R
+\name{tnm_rules_docs}
+\alias{tnm_rules_docs}
+\title{Documentation of TNM staging rules}
+\source{
+UICC_7th edition.pdf; UICC_8th edition.pdf corroborated by nhs/*.pdf; uicc/UICC_9th edition.pdf
+}
+\description{
+Internal auxiliary files used to determine cancer stage.
+}
+\details{
+The package stores three rule sets derived from UICC guidelines for the
+TNM staging system. The rules stored in these files are differentiated by
+cancer \strong{site} (bladder, breast, colorectal, lung, oesophageal, prostate,
+skin), classification \strong{type} (clinical, pathological, base) and
+classification \strong{edition} (7th, 8th, unspecified). The files are:
+
+\enumerate{
+\item \code{tnm_concepts.csv}: contains information about the individual TNM
+components and their concept ids, differentiated by type and edition.
+There are \eqn{393} total concepts for \eqn{44} unique components:
+
+\if{html}{\out{
}}\preformatted{TX, T0, Tis, Ta, T1, T1a, T1b, T1c, T1mi, T2, T2a, T2b, T2c, T3, T3a,
+T3b, T4, T4a, T4b, T4c, T4d, NX, N0, N1, N1a, N1b, N1c, N1mi, N2, N2a,
+N2b, N2c, N3, N3a, N3b, N3c, M0, M1, M1a, M1b, M1c, M1c1, M1c2, M1d.
+}\if{html}{\out{
}}
+
+These components have different versions according to:
+\itemize{
+\item Edition: \eqn{131} concepts for 7th, \eqn{131} for 8th, \eqn{131}
+for unspecified;
+\item Type: \eqn{132} concepts for base, \eqn{132} for clinical, \eqn{129}
+for pathological (the \code{M0} component is not valid in the pathological
+setting, for any of the editions).
+}
+
+\item \code{tnm_stage_mapping.csv}: contains the rules to determine the cancer
+stage based on a combination of individual TNM components, differentiated
+by cancer site, type (clinical, pathological, base) and by edition (7th,
+8th, 9th). Each rule refers to a specific source page of the UICC guidelines.
+
+The currently available rules support the following concept categories.
+
+For \code{bladder} cancer:
+\itemize{
+\item Edition: 7th, 8th, 9th available;
+\item Type: only "base" is available, for all editions.
+}
+For \code{breast} cancer:
+\itemize{
+\item Edition: 7th, 8th, 9th available;
+\item Type: only "base" is available, for all editions.
+}
+For \code{colorectal} cancer:
+\itemize{
+\item Edition: 7th, 8th, 9th available;
+\item Type: only "base" is available, for all editions.
+}
+For \code{lung} cancer:
+\itemize{
+\item Edition: 7th, 8th, 9th available;
+\item Type: only "base" is available, for all editions.
+}
+For \code{oesophageal} cancer:
+\itemize{
+\item For 7th edition, only "base" type is available;
+\item For 8th edition, only "clinical" and "pathological" types are available but not "base".
+\item For 9th edition, only "clinical" and "pathological" types are available but not "base".
+}
+For \code{prostate} cancer:
+\itemize{
+\item For 7th edition, only "base" type is available;
+\item For 8th edition, only "clinical" type is available;
+\item For 9th edition, only "clinical" and "pathological" types are available but not "base".
+}
+For \code{skin} cancer:
+\itemize{
+\item For 7th edition, only "pathological" type is available;
+\item For 8th edition, only "clinical" and "pathological" types are available but not "base".
+\item For 9th edition, only "clinical" and "pathological" types are available but not "base".
+}
+
+\item \code{tnm_stage_shortcut_mapping.csv}: contains some more general rules to
+determine the cancer stage based on a subset of individual TNM components,
+differentiated by cancer site, type and edition. In fact, there are some
+special cases in which the value of one or two components
+is enough to determine the stage, independently of the others.
+Each rule refers to a specific source page of the UICC guidelines.
+}
+
+These files are meant for internal use and are not intended
+to be modified by users.
+}
+\keyword{internal}
diff --git a/renv.lock b/renv.lock
index 3689ccc..ce2ea99 100644
--- a/renv.lock
+++ b/renv.lock
@@ -405,8 +405,7 @@
"Description": "Provides color schemes for maps (and other graphics) designed by Cynthia Brewer as described at http://colorbrewer2.org.",
"License": "Apache License 2.0",
"NeedsCompilation": "no",
- "Repository": "RSPM",
- "Encoding": "UTF-8"
+ "Repository": "CRAN"
},
"RPostgres": {
"Package": "RPostgres",
@@ -541,7 +540,6 @@
"Description": "An R interface to load testing data in the 'OMOP' Common Data Model ('CDM'). An input file, csv or xlsx, can be converted to a 'CDMConnector' object. This object can be used to execute and test studies that use the 'CDM' .",
"License": "Apache License (>= 2)",
"Encoding": "UTF-8",
- "LazyData": "true",
"RoxygenNote": "7.3.3",
"Depends": [
"R (>= 4.1.0)"
@@ -586,13 +584,14 @@
"Config/testthat/edition": "3",
"URL": "https://github.com/darwin-eu/TestGenerator, https://darwin-eu.github.io/TestGenerator/",
"BugReports": "https://github.com/darwin-eu/TestGenerator/issues",
- "Author": "Cesar Barboza [aut, cre] (), Ioanna Nika [aut], Ger Inberg [aut] (), Adam Black [aut] ()",
"RemoteType": "github",
"RemoteHost": "api.github.com",
- "RemoteUsername": "darwin-eu-dev",
"RemoteRepo": "TestGenerator",
+ "RemoteUsername": "darwin-eu-dev",
"RemoteRef": "develop",
- "RemoteSha": "85ed5c8d19f0015c4806bd8b2e34625feb25bba3"
+ "RemoteSha": "85ed5c8d19f0015c4806bd8b2e34625feb25bba3",
+ "NeedsCompilation": "no",
+ "Author": "Cesar Barboza [aut, cre] (), Ioanna Nika [aut], Ger Inberg [aut] (), Adam Black [aut] ()"
},
"UpSetR": {
"Package": "UpSetR",
@@ -741,8 +740,7 @@
"NeedsCompilation": "no",
"Author": "Hadley Wickham [aut, cre]",
"Maintainer": "Hadley Wickham ",
- "Repository": "https://packagemanager.posit.co/cran/latest",
- "Encoding": "UTF-8"
+ "Repository": "CRAN"
},
"backports": {
"Package": "backports",
@@ -785,8 +783,7 @@
"URL": "https://www.rforge.net/base64enc",
"BugReports": "https://github.com/s-u/base64enc/issues",
"NeedsCompilation": "yes",
- "Repository": "https://packagemanager.posit.co/cran/latest",
- "Encoding": "UTF-8"
+ "Repository": "CRAN"
},
"bit": {
"Package": "bit",
@@ -913,7 +910,7 @@
"NeedsCompilation": "yes",
"Author": "Jim Hester [aut] (), Gábor Csárdi [aut, cre], Posit Software, PBC [cph, fnd]",
"Maintainer": "Gábor Csárdi ",
- "Repository": "https://packagemanager.posit.co/cran/latest"
+ "Repository": "CRAN"
},
"bslib": {
"Package": "bslib",
@@ -1000,7 +997,7 @@
"NeedsCompilation": "yes",
"Author": "Winston Chang [aut, cre], Posit Software, PBC [cph, fnd]",
"Maintainer": "Winston Chang ",
- "Repository": "https://packagemanager.posit.co/cran/latest"
+ "Repository": "CRAN"
},
"callr": {
"Package": "callr",
@@ -1194,7 +1191,7 @@
"NeedsCompilation": "no",
"Author": "Matthew Lincoln [aut, cre] (ORCID: ), Louis Maddox [ctb], Steve Simpson [ctb], Jennifer Bryan [ctb]",
"Maintainer": "Matthew Lincoln ",
- "Repository": "https://packagemanager.posit.co/cran/latest"
+ "Repository": "CRAN"
},
"clock": {
"Package": "clock",
@@ -1264,7 +1261,7 @@
"NeedsCompilation": "yes",
"Author": "Jeroen Ooms [aut, cre] (ORCID: ), John MacFarlane [cph] (Author of cmark)",
"Maintainer": "Jeroen Ooms ",
- "Repository": "https://packagemanager.posit.co/cran/latest"
+ "Repository": "CRAN"
},
"cpp11": {
"Package": "cpp11",
@@ -1374,7 +1371,7 @@
"NeedsCompilation": "no",
"Author": "Jeroen Ooms [aut, cre] (ORCID: )",
"Maintainer": "Jeroen Ooms ",
- "Repository": "https://packagemanager.posit.co/cran/latest"
+ "Repository": "CRAN"
},
"curl": {
"Package": "curl",
@@ -1507,7 +1504,7 @@
"Collate": "'assertions.R' 'authors-at-r.R' 'built.R' 'classes.R' 'collate.R' 'constants.R' 'deps.R' 'desc-package.R' 'description.R' 'encoding.R' 'find-package-root.R' 'latex.R' 'non-oo-api.R' 'package-archives.R' 'read.R' 'remotes.R' 'str.R' 'syntax_checks.R' 'urls.R' 'utils.R' 'validate.R' 'version.R'",
"NeedsCompilation": "no",
"Author": "Gábor Csárdi [aut, cre], Kirill Müller [aut], Jim Hester [aut], Maëlle Salmon [ctb] (), Posit Software, PBC [cph, fnd]",
- "Repository": "https://packagemanager.posit.co/cran/latest"
+ "Repository": "CRAN"
},
"diffobj": {
"Package": "diffobj",
@@ -1541,7 +1538,7 @@
"NeedsCompilation": "yes",
"Author": "Brodie Gaslam [aut, cre], Michael B. Allen [ctb, cph] (Original C implementation of Myers Diff Algorithm)",
"Maintainer": "Brodie Gaslam ",
- "Repository": "https://packagemanager.posit.co/cran/latest"
+ "Repository": "CRAN"
},
"digest": {
"Package": "digest",
@@ -1570,7 +1567,7 @@
"NeedsCompilation": "yes",
"Author": "Dirk Eddelbuettel [aut, cre] (ORCID: ), Antoine Lucas [ctb] (ORCID: ), Jarek Tuszynski [ctb], Henrik Bengtsson [ctb] (ORCID: ), Simon Urbanek [ctb] (ORCID: ), Mario Frasca [ctb], Bryan Lewis [ctb], Murray Stokely [ctb], Hannes Muehleisen [ctb] (ORCID: ), Duncan Murdoch [ctb], Jim Hester [ctb] (ORCID: ), Wush Wu [ctb] (ORCID: ), Qiang Kou [ctb] (ORCID: ), Thierry Onkelinx [ctb] (ORCID: ), Michel Lang [ctb] (ORCID: ), Viliam Simko [ctb], Kurt Hornik [ctb] (ORCID: ), Radford Neal [ctb] (ORCID: ), Kendon Bell [ctb] (ORCID: ), Matthew de Queljoe [ctb], Dmitry Selivanov [ctb] (ORCID: ), Ion Suruceanu [ctb] (ORCID: ), Bill Denney [ctb] (ORCID: ), Dirk Schumacher [ctb], András Svraka [ctb] (ORCID: ), Sergey Fedorov [ctb] (ORCID: ), Will Landau [ctb] (ORCID: ), Floris Vanderhaeghe [ctb] (ORCID: ), Kevin Tappe [ctb], Harris McGehee [ctb], Tim Mastny [ctb], Aaron Peikert [ctb] (ORCID: ), Mark van der Loo [ctb] (ORCID: ), Chris Muir [ctb] (ORCID: ), Moritz Beller [ctb] (ORCID: ), Sebastian Campbell [ctb] (ORCID: ), Winston Chang [ctb] (ORCID: ), Dean Attali [ctb] (ORCID: ), Michael Chirico [ctb] (ORCID: ), Kevin Ushey [ctb] (ORCID: ), Carl Pearson [ctb] (ORCID: )",
"Maintainer": "Dirk Eddelbuettel ",
- "Repository": "https://packagemanager.posit.co/cran/latest"
+ "Repository": "CRAN"
},
"dplyr": {
"Package": "dplyr",
@@ -1757,7 +1754,7 @@
"NeedsCompilation": "yes",
"Author": "Winston Chang [aut, cre], Posit Software, PBC [cph, fnd], Tessil [cph] (hopscotch_map library)",
"Maintainer": "Winston Chang ",
- "Repository": "https://packagemanager.posit.co/cran/latest"
+ "Repository": "CRAN"
},
"fontawesome": {
"Package": "fontawesome",
@@ -1792,7 +1789,7 @@
"NeedsCompilation": "no",
"Author": "Richard Iannone [aut, cre] (), Christophe Dervieux [ctb] (), Winston Chang [ctb], Dave Gandy [ctb, cph] (Font-Awesome font), Posit Software, PBC [cph, fnd]",
"Maintainer": "Richard Iannone ",
- "Repository": "https://packagemanager.posit.co/cran/latest"
+ "Repository": "CRAN"
},
"fs": {
"Package": "fs",
@@ -1834,7 +1831,7 @@
"NeedsCompilation": "yes",
"Author": "Jim Hester [aut], Hadley Wickham [aut], Gábor Csárdi [aut], Jeroen Ooms [cre], libuv project contributors [cph] (libuv library), Joyent, Inc. and other Node contributors [cph] (libuv library), Posit Software, PBC [cph, fnd] (ROR: )",
"Maintainer": "Jeroen Ooms ",
- "Repository": "https://packagemanager.posit.co/cran/latest"
+ "Repository": "CRAN"
},
"generics": {
"Package": "generics",
@@ -1901,7 +1898,7 @@
"NeedsCompilation": "yes",
"Author": "Jeroen Ooms [aut, cre] (ORCID: ), Jennifer Bryan [ctb] (ORCID: )",
"Maintainer": "Jeroen Ooms ",
- "Repository": "https://packagemanager.posit.co/cran/latest"
+ "Repository": "CRAN"
},
"ggplot2": {
"Package": "ggplot2",
@@ -2055,7 +2052,7 @@
"NeedsCompilation": "no",
"Author": "Gábor Csárdi [aut, cre], RStudio [cph, fnd]",
"Maintainer": "Gábor Csárdi ",
- "Repository": "https://packagemanager.posit.co/cran/latest"
+ "Repository": "CRAN"
},
"glue": {
"Package": "glue",
@@ -2126,7 +2123,8 @@
"NeedsCompilation": "no",
"Author": "Baptiste Auguie [aut, cre], Anton Antonov [ctb]",
"Maintainer": "Baptiste Auguie ",
- "Repository": "CRAN"
+ "Repository": "https://packagemanager.posit.co/cran/latest",
+ "Encoding": "UTF-8"
},
"gtable": {
"Package": "gtable",
@@ -2168,6 +2166,44 @@
"Maintainer": "Thomas Lin Pedersen ",
"Repository": "https://packagemanager.posit.co/cran/latest"
},
+ "here": {
+ "Package": "here",
+ "Version": "1.0.2",
+ "Source": "Repository",
+ "Title": "A Simpler Way to Find Your Files",
+ "Date": "2025-09-06",
+ "Authors@R": "c(person(given = \"Kirill\", family = \"M\\u00fcller\", role = c(\"aut\", \"cre\"), email = \"kirill@cynkra.com\", comment = c(ORCID = \"0000-0002-1416-3412\")), person(given = \"Jennifer\", family = \"Bryan\", role = \"ctb\", email = \"jenny@rstudio.com\", comment = c(ORCID = \"0000-0002-6983-2759\")))",
+ "Description": "Constructs paths to your project's files. Declare the relative path of a file within your project with 'i_am()'. Use the 'here()' function as a drop-in replacement for 'file.path()', it will always locate the files relative to your project root.",
+ "License": "MIT + file LICENSE",
+ "URL": "https://here.r-lib.org/, https://github.com/r-lib/here",
+ "BugReports": "https://github.com/r-lib/here/issues",
+ "Imports": [
+ "rprojroot (>= 2.1.0)"
+ ],
+ "Suggests": [
+ "conflicted",
+ "covr",
+ "fs",
+ "knitr",
+ "palmerpenguins",
+ "plyr",
+ "readr",
+ "rlang",
+ "rmarkdown",
+ "testthat",
+ "uuid",
+ "withr"
+ ],
+ "VignetteBuilder": "knitr",
+ "Encoding": "UTF-8",
+ "RoxygenNote": "7.3.3.9000",
+ "Config/testthat/edition": "3",
+ "Config/Needs/website": "tidyverse/tidytemplate",
+ "NeedsCompilation": "no",
+ "Author": "Kirill Müller [aut, cre] (ORCID: ), Jennifer Bryan [ctb] (ORCID: )",
+ "Maintainer": "Kirill Müller ",
+ "Repository": "CRAN"
+ },
"highr": {
"Package": "highr",
"Version": "0.12",
@@ -2273,7 +2309,7 @@
"NeedsCompilation": "yes",
"Author": "Joe Cheng [aut], Carson Sievert [aut, cre] (ORCID: ), Barret Schloerke [aut] (ORCID: ), Winston Chang [aut] (ORCID: ), Yihui Xie [aut], Jeff Allen [aut], Posit Software, PBC [cph, fnd]",
"Maintainer": "Carson Sievert ",
- "Repository": "https://packagemanager.posit.co/cran/latest"
+ "Repository": "CRAN"
},
"httpuv": {
"Package": "httpuv",
@@ -2317,7 +2353,7 @@
"NeedsCompilation": "yes",
"Author": "Joe Cheng [aut], Winston Chang [aut, cre], Posit, PBC [cph, fnd] (ROR: ), Hector Corrada Bravo [ctb], Jeroen Ooms [ctb], Andrzej Krzemienski [cph] (optional.hpp), libuv project contributors [cph] (libuv library, see src/libuv/AUTHORS file), Joyent, Inc. and other Node contributors [cph] (libuv library, see src/libuv/AUTHORS file; and http-parser library, see src/http-parser/AUTHORS file), Niels Provos [cph] (libuv subcomponent: tree.h), Internet Systems Consortium, Inc. [cph] (libuv subcomponent: inet_pton and inet_ntop, contained in src/libuv/src/inet.c), Alexander Chemeris [cph] (libuv subcomponent: stdint-msvc2008.h (from msinttypes)), Google, Inc. [cph] (libuv subcomponent: pthread-fixes.c), Sony Mobile Communcations AB [cph] (libuv subcomponent: pthread-fixes.c), Berkeley Software Design Inc. [cph] (libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c), Kenneth MacKay [cph] (libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c), Emergya (Cloud4all, FP7/2007-2013, grant agreement no 289016) [cph] (libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c), Steve Reid [aut] (SHA-1 implementation), James Brown [aut] (SHA-1 implementation), Bob Trower [aut] (base64 implementation), Alexander Peslyak [aut] (MD5 implementation), Trantor Standard Systems [cph] (base64 implementation), Igor Sysoev [cph] (http-parser)",
"Maintainer": "Winston Chang ",
- "Repository": "https://packagemanager.posit.co/cran/latest"
+ "Repository": "CRAN"
},
"httr2": {
"Package": "httr2",
@@ -2399,8 +2435,7 @@
"testthat"
],
"NeedsCompilation": "no",
- "Repository": "https://packagemanager.posit.co/cran/latest",
- "Encoding": "UTF-8"
+ "Repository": "CRAN"
},
"isoband": {
"Package": "isoband",
@@ -2464,7 +2499,7 @@
"NeedsCompilation": "no",
"Author": "Carson Sievert [aut, cre] (), Joe Cheng [aut], RStudio [cph], jQuery Foundation [cph] (jQuery library and jQuery UI library), jQuery contributors [ctb, cph] (jQuery library; authors listed in inst/lib/jquery-AUTHORS.txt)",
"Maintainer": "Carson Sievert ",
- "Repository": "https://packagemanager.posit.co/cran/latest"
+ "Repository": "CRAN"
},
"jsonlite": {
"Package": "jsonlite",
@@ -2578,8 +2613,7 @@
"stats",
"graphics"
],
- "Repository": "RSPM",
- "Encoding": "UTF-8"
+ "Repository": "CRAN"
},
"later": {
"Package": "later",
@@ -2619,7 +2653,7 @@
"NeedsCompilation": "yes",
"Author": "Winston Chang [aut] (ORCID: ), Joe Cheng [aut], Charlie Gao [aut, cre] (ORCID: ), Posit Software, PBC [cph, fnd] (ROR: ), Marcus Geelnard [ctb, cph] (TinyCThread library, https://tinycthread.github.io/), Evan Nemerson [ctb, cph] (TinyCThread library, https://tinycthread.github.io/)",
"Maintainer": "Charlie Gao ",
- "Repository": "https://packagemanager.posit.co/cran/latest"
+ "Repository": "CRAN"
},
"lifecycle": {
"Package": "lifecycle",
@@ -2766,7 +2800,7 @@
"NeedsCompilation": "no",
"Author": "Hadley Wickham [aut], Jim Hester [aut], Winston Chang [aut, cre], Kirill Müller [aut], Daniel Cook [aut], Mark Edmondson [ctb]",
"Maintainer": "Winston Chang ",
- "Repository": "https://packagemanager.posit.co/cran/latest"
+ "Repository": "CRAN"
},
"memuse": {
"Package": "memuse",
@@ -2981,7 +3015,7 @@
"NeedsCompilation": "no",
"Author": "Gábor Csárdi [aut, cre]",
"Maintainer": "Gábor Csárdi ",
- "Repository": "https://packagemanager.posit.co/cran/latest"
+ "Repository": "CRAN"
},
"pillar": {
"Package": "pillar",
@@ -3206,8 +3240,7 @@
],
"Collate": "'adjective.R' 'adverb.R' 'exclamation.R' 'verb.R' 'rpackage.R' 'package.R'",
"NeedsCompilation": "no",
- "Repository": "https://packagemanager.posit.co/cran/latest",
- "Encoding": "UTF-8"
+ "Repository": "CRAN"
},
"prettyunits": {
"Package": "prettyunits",
@@ -3273,7 +3306,7 @@
"NeedsCompilation": "yes",
"Author": "Gábor Csárdi [aut, cre, cph] (ORCID: ), Winston Chang [aut], Posit Software, PBC [cph, fnd] (ROR: ), Ascent Digital Services [cph, fnd]",
"Maintainer": "Gábor Csárdi ",
- "Repository": "https://packagemanager.posit.co/cran/latest"
+ "Repository": "CRAN"
},
"progress": {
"Package": "progress",
@@ -3353,7 +3386,7 @@
"NeedsCompilation": "no",
"Author": "Joe Cheng [aut], Barret Schloerke [aut, cre] (ORCID: ), Winston Chang [aut] (ORCID: ), Charlie Gao [aut] (ORCID: ), Posit Software, PBC [cph, fnd] (ROR: )",
"Maintainer": "Barret Schloerke ",
- "Repository": "https://packagemanager.posit.co/cran/latest"
+ "Repository": "CRAN"
},
"ps": {
"Package": "ps",
@@ -3818,7 +3851,7 @@
"Config/roxygen2/version": "8.0.0",
"NeedsCompilation": "no",
"Author": "Kevin Ushey [aut, cre], JJ Allaire [aut], Hadley Wickham [aut], Gary Ritchie [aut], RStudio [cph]",
- "Repository": "https://packagemanager.posit.co/cran/latest"
+ "Repository": "CRAN"
},
"sass": {
"Package": "sass",
@@ -3854,7 +3887,7 @@
"NeedsCompilation": "yes",
"Author": "Joe Cheng [aut], Timothy Mastny [aut], Richard Iannone [aut] (), Barret Schloerke [aut] (), Carson Sievert [aut, cre] (), Christophe Dervieux [ctb] (), RStudio [cph, fnd], Sass Open Source Foundation [ctb, cph] (LibSass library), Greter Marcel [ctb, cph] (LibSass library), Mifsud Michael [ctb, cph] (LibSass library), Hampton Catlin [ctb, cph] (LibSass library), Natalie Weizenbaum [ctb, cph] (LibSass library), Chris Eppstein [ctb, cph] (LibSass library), Adams Joseph [ctb, cph] (json.cpp), Trifunovic Nemanja [ctb, cph] (utf8.h)",
"Maintainer": "Carson Sievert ",
- "Repository": "https://packagemanager.posit.co/cran/latest"
+ "Repository": "CRAN"
},
"scales": {
"Package": "scales",
@@ -4251,7 +4284,7 @@
"NeedsCompilation": "yes",
"Author": "Hadley Wickham [aut, cre], Posit Software, PBC [cph, fnd], R Core team [ctb] (Implementation of utils::recover())",
"Maintainer": "Hadley Wickham ",
- "Repository": "https://packagemanager.posit.co/cran/latest"
+ "Repository": "CRAN"
},
"tibble": {
"Package": "tibble",
@@ -4554,7 +4587,7 @@
"NeedsCompilation": "no",
"Author": "Hadley Wickham [aut] (ORCID: ), Jennifer Bryan [aut, cre] (ORCID: ), Malcolm Barrett [aut] (ORCID: ), Andy Teucher [aut] (ORCID: ), Posit Software, PBC [cph, fnd] (ROR: )",
"Maintainer": "Jennifer Bryan ",
- "Repository": "https://packagemanager.posit.co/cran/latest"
+ "Repository": "CRAN"
},
"utf8": {
"Package": "utf8",
@@ -4791,8 +4824,7 @@
],
"RoxygenNote": "6.1.1",
"NeedsCompilation": "no",
- "Repository": "https://packagemanager.posit.co/cran/latest",
- "Encoding": "UTF-8"
+ "Repository": "CRAN"
},
"withr": {
"Package": "withr",
@@ -4947,10 +4979,9 @@
"R (>= 2.10.0)"
],
"License": "GPL (>= 2)",
- "Repository": "https://packagemanager.posit.co/cran/latest",
+ "Repository": "CRAN",
"NeedsCompilation": "no",
- "Author": "David B. Dahl [aut], David Scott [aut, cre], Charles Roosen [aut], Arni Magnusson [aut], Jonathan Swinton [aut], Ajay Shah [ctb], Arne Henningsen [ctb], Benno Puetz [ctb], Bernhard Pfaff [ctb], Claudio Agostinelli [ctb], Claudius Loehnert [ctb], David Mitchell [ctb], David Whiting [ctb], Fernando da Rosa [ctb], Guido Gay [ctb], Guido Schulz [ctb], Ian Fellows [ctb], Jeff Laake [ctb], John Walker [ctb], Jun Yan [ctb], Liviu Andronic [ctb], Markus Loecher [ctb], Martin Gubri [ctb], Matthieu Stigler [ctb], Robert Castelo [ctb], Seth Falcon [ctb], Stefan Edwards [ctb], Sven Garbade [ctb], Uwe Ligges [ctb]",
- "Encoding": "UTF-8"
+ "Author": "David B. Dahl [aut], David Scott [aut, cre], Charles Roosen [aut], Arni Magnusson [aut], Jonathan Swinton [aut], Ajay Shah [ctb], Arne Henningsen [ctb], Benno Puetz [ctb], Bernhard Pfaff [ctb], Claudio Agostinelli [ctb], Claudius Loehnert [ctb], David Mitchell [ctb], David Whiting [ctb], Fernando da Rosa [ctb], Guido Gay [ctb], Guido Schulz [ctb], Ian Fellows [ctb], Jeff Laake [ctb], John Walker [ctb], Jun Yan [ctb], Liviu Andronic [ctb], Markus Loecher [ctb], Martin Gubri [ctb], Matthieu Stigler [ctb], Robert Castelo [ctb], Seth Falcon [ctb], Stefan Edwards [ctb], Sven Garbade [ctb], Uwe Ligges [ctb]"
},
"yaml": {
"Package": "yaml",