diff --git a/.Rbuildignore b/.Rbuildignore new file mode 100644 index 0000000..c1baeac --- /dev/null +++ b/.Rbuildignore @@ -0,0 +1,18 @@ +^data$ +^dataPaths_-_Template\.ini$ +^manuscript_cross_study$ +^app\.R$ +^test_code\.R$ +^debug_code$ +^Amin_liver_scoring\.R$ +^single_study_liver_scoring\.R$ +^test_studies_report\.txt$ +^test_study\.rds$ +^compile\.rds$ +^master_error_df\.rds$ +^note\.txt$ +^old_script\.R$ +^study_test_10\.rds$ +^Functions$ +^studies_test_10.rds$ +^manifest\.json$ diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b8e4ccd --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +manuscript_cross_study/ +debug_code/ +dataPaths - Template.ini + diff --git a/DESCRIPTION b/DESCRIPTION new file mode 100644 index 0000000..6c51107 --- /dev/null +++ b/DESCRIPTION @@ -0,0 +1,31 @@ +Package: sendSummarizer +Title: shiny app for SEND cross study +Version: 0.0.0.9000 +Authors@R: + person("First", "Last", , "first.last@example.com", role = c("aut", "cre"), + comment = c(ORCID = "YOUR-ORCID-ID")) +Description: app for SEND cross study +License: `use_mit_license()`, `use_gpl3_license()` or friends to pick a + license +Encoding: UTF-8 +Roxygen: list(markdown = TRUE) +RoxygenNote: 7.3.1 +Imports: + cowplot, + dplyr, + fmsb, + ggplot2, + gridExtra, + Hmisc, + httr, + magrittr, + reshape2, + sendigR, + shiny, + shinydashboard, + shinyFiles, + shinyTree, + shinyWidgets, + stringr, + tidyr, + tools diff --git a/NAMESPACE b/NAMESPACE new file mode 100644 index 0000000..3408618 --- /dev/null +++ b/NAMESPACE @@ -0,0 +1,82 @@ +# Generated by roxygen2: do not edit by hand + +export(get_all_score) +export(get_bw_score) +export(get_compile_data) +export(get_doses) +export(get_lb_score) +export(get_mi_score) +export(get_treatment_group) +export(send_cross_study_app) +import(data.table) +import(ggplot2) +import(shiny) +importFrom(Hmisc,sasxport.get) +importFrom(RSQLite,SQLite) +importFrom(RSQLite,dbConnect) +importFrom(cowplot,get_legend) +importFrom(cowplot,ggdraw) +importFrom(cowplot,plot_grid) +importFrom(dplyr,arrange) +importFrom(dplyr,case_when) +importFrom(dplyr,first) +importFrom(dplyr,group_by) +importFrom(dplyr,lag) +importFrom(dplyr,mutate) +importFrom(dplyr,summarise) +importFrom(dplyr,summarise_at) +importFrom(dplyr,vars) +importFrom(fmsb,radarchart) +importFrom(ggpattern,geom_tile_pattern) +importFrom(ggpattern,scale_pattern_density_manual) +importFrom(ggpattern,scale_pattern_fill_brewer) +importFrom(ggplot2,ggplot) +importFrom(grDevices,rgb) +importFrom(graphics,legend) +importFrom(graphics,par) +importFrom(gridExtra,grid.arrange) +importFrom(httr,GET) +importFrom(httr,authenticate) +importFrom(httr,content) +importFrom(magrittr,"%<>%") +importFrom(magrittr,"%>%") +importFrom(plotly,ggplotly) +importFrom(plotly,plotlyOutput) +importFrom(plotly,renderPlotly) +importFrom(reshape2,dcast) +importFrom(sendigR,genericQuery) +importFrom(sendigR,getStudiesSDESIGN) +importFrom(sendigR,initEnvironment) +importFrom(shinyFiles,shinyDirButton) +importFrom(shinyFiles,shinyDirChoose) +importFrom(shinyTree,get_selected) +importFrom(shinyTree,renderTree) +importFrom(shinyTree,shinyTree) +importFrom(shinyWidgets,actionBttn) +importFrom(shinyWidgets,pickerInput) +importFrom(shinydashboard,dashboardBody) +importFrom(shinydashboard,dashboardHeader) +importFrom(shinydashboard,dashboardPage) +importFrom(shinydashboard,dashboardSidebar) +importFrom(shinydashboard,menuItem) +importFrom(shinydashboard,sidebarMenu) +importFrom(stats,aggregate) +importFrom(stats,complete.cases) +importFrom(stats,dist) +importFrom(stats,hclust) +importFrom(stats,lm) +importFrom(stats,na.omit) +importFrom(stats,sd) +importFrom(stats,setNames) +importFrom(stringr,str_count) +importFrom(stringr,str_detect) +importFrom(stringr,str_match) +importFrom(stringr,str_replace_all) +importFrom(stringr,str_which) +importFrom(stringr,word) +importFrom(tidyr,pivot_longer) +importFrom(tidyr,replace_na) +importFrom(tools,file_path_sans_ext) +importFrom(utils,download.file) +importFrom(utils,head) +importFrom(utils,read.csv) diff --git a/R/CrossStudyVisualizationApp_LoadExternal.R b/R/CrossStudyVisualizationApp_LoadExternal.R new file mode 100644 index 0000000..0bb74a9 --- /dev/null +++ b/R/CrossStudyVisualizationApp_LoadExternal.R @@ -0,0 +1,2350 @@ + +#This R File Makes an App that allows for visualization of cross-study analysis +#of SEND Data + +#Need to do: +#* Add Detailed Scoring Controls (i.e. user can determine scoring ranges) > In-Progress GM + #* Goal is to have this as another blue tab like the "data load" tab +#* Ability to load different studies > SB (Done) +#* Add User control to facet by route, duration, treatment or species + + + +################################################################################ +## this code is for creating shiny app +## +## History: +## ----------------------------------------------------------------------------- +## Date Programmer Note +## ---------- -------------------- ------------------------------------------ +## 2023-05-22 Susan Butler, Initial version +## Yousuf Ali +################################################################################ + +#' @title Run sendCrossStudy app +#' @param database_path Optional, character\cr +#' file path for database +#' +#' @return function run the app. +#' +#' @export +#' @examples +#' \dontrun{ +#' send_cross_study_app() +#' } + +#' @import ggplot2 +#' @import data.table +#' @import shiny +#' @importFrom cowplot ggdraw plot_grid get_legend +#' @importFrom ggpattern geom_tile_pattern scale_pattern_density_manual scale_pattern_fill_brewer +#' @importFrom gridExtra grid.arrange +#' @importFrom Hmisc sasxport.get +#' @importFrom httr authenticate content GET +#' @importFrom reshape2 dcast +#' @importFrom sendigR genericQuery getStudiesSDESIGN initEnvironment +#' @importFrom shinydashboard dashboardBody dashboardHeader dashboardPage dashboardSidebar menuItem sidebarMenu +#' @importFrom shinyFiles shinyDirButton shinyDirChoose +#' @importFrom shinyTree get_selected renderTree shinyTree +#' @importFrom shinyWidgets actionBttn pickerInput +#' @importFrom tools file_path_sans_ext +#' @importFrom magrittr %>% %<>% +#' @importFrom stringr str_count str_detect str_replace_all str_which word str_match +#' @importFrom tidyr replace_na pivot_longer +#' @importFrom dplyr arrange case_when first group_by mutate summarise_at vars lag summarise +#' @importFrom grDevices rgb +#' @importFrom stats aggregate lm sd na.omit setNames complete.cases dist hclust +#' @importFrom fmsb radarchart +#' @importFrom graphics legend par +#' @importFrom utils download.file read.csv head +#' @importFrom ggplot2 ggplot +#' @importFrom plotly ggplotly renderPlotly plotlyOutput + + + + +send_cross_study_app <- function(database_path) { + +#Set File Path to Biocelerate Data +## homePath <- dirname(this.path()) +## setwd(homePath) + +##### Setup Values and Functions #### + +#Loading Initial Datasets +summaryResults <- list() +CompileDataSummary <- list() +BodyWeightSummary <- list() +FWDataSummary <- list() +defaultVal <- 350 +SEX <- 'M' + +#Database Load +db_path <- database_path +dbtoken <- sendigR::initEnvironment(dbType = 'sqlite', + dbPath = db_path, + dbCreate = FALSE) + + +RptDoseStudyID <- sendigR::getStudiesSDESIGN(dbtoken,studyDesignFilter = "PARALLEL") +MIStudyIDS <- sendigR::genericQuery(dbtoken, "SELECT STUDYID FROM MI") #limiting to MI because it is the least likely to be filled +dbStudyIDs <- intersect(RptDoseStudyID$STUDYID,MIStudyIDS$STUDYID) +rm(MIStudyIDS) #Freeing Memory +rm(RptDoseStudyID) #Freeing Memory +dbStudyIDS <- unique(dbStudyIDs) +#Pull INDs and Study Titles for those StudyIDs +APPID <- sendigR::genericQuery(dbtoken, "SELECT * FROM ID WHERE STUDYID in (:1)", dbStudyIDs) +STITLE <- sendigR::genericQuery(dbtoken, 'SELECT STUDYID, TSVAL FROM TS WHERE TSPARMCD = "STITLE" and STUDYID in (:1)', dbStudyIDs) +dbStudys <- merge(APPID, STITLE, by = "STUDYID") +dbStudys$CombinedName <- paste0(dbStudys$APPID,"-",dbStudys$STUDYID,": ",dbStudys$TSVAL) +rm(APPID) #Freeing Memory +rm(STITLE) #Freeing Memory + + +#Standardizing Terminology +MITESTCDlist <- list('LIVER' = c('LIVER'), + 'KIDNEY' = c('KIDNEY'), + 'HEMATOPOIETIC' = c('BONE MARROW', 'SPLEEN', 'THYMUS','LYMPH NODE, MESENTERIC', 'LYMPH NODE, MANDIBULAR'), + 'ENDOCRINE' = c('GLAND, THYROID', 'GLAND, ADRENAL', 'GLAND, PITUITARY', + 'GLAND, PARATHYROID', 'PANCREAS'), + 'REPRODUCTIVE' = c('CERVIX','EPIDIDYMIS','GLAND, PROSTATE','GLAND, MAMMARY', + 'OVARY','PROSTATE','TESTIS','UTERUS','VAGINA')) +OMTESTCDlist <- MITESTCDlist +organTESTCDlist <- list('LIVER' = c('SERUM | ALT', + 'SERUM | AST', + 'SERUM | ALP', + 'SERUM | GGT', + 'SERUM | BILI', + 'SERUM | ALB'), + 'KIDNEY' = c('SERUM | CREAT', + 'SERUM | UREAN', + 'SERUM | ALB', + 'SERUM | CL', + 'SERUM | K', + 'SERUM | PHOS', + 'SERUM | SODIUM', + 'URINE | CL', + 'URINE | K', + 'URINE | SODIUM', + 'URINE | GLUC', + 'URINE | SPGRAV', + 'URINE | VOLUME', + 'URINE | PROT', + 'URINE | UROBIL'), + 'HEMATOPOIETIC' = c( 'WHOLE BLOOD | RBC', + 'WHOLE BLOOD | HCT', + 'WHOLE BLOOD | MCHC', + 'WHOLE BLOOD | MCH', + 'WHOLE BLOOD | MCV', + 'WHOLE BLOOD | RDW', + 'WHOLE BLOOD | WBC', + 'WHOLE BLOOD | MONO', + 'WHOLE BLOOD | BASO', + 'WHOLE BLOOD | EOS', + 'WHOLE BLOOD | LYM', + 'WHOLE BLOOD | PLAT', + 'WHOLE BLOOD | MPV'), + 'ENDOCRINE' = c('URINE | CL', + 'URINE | K', + 'URINE | SODIUM', + 'URINE | GLUC', + 'URINE | SPGRAV', + 'URINE | VOLUME', + 'URINE | PROT'), + 'REPRODUCTIVE' = c('SERUM | GNRH', + 'SERUM | LH', + 'SERUM | FSH', + 'SERUM | DHT', + 'SERUM | DOXMTST', + 'SERUM | FAI', + 'SERUM | MTESTOS', + 'SERUM | NANDRLN', + 'SERUM | TESTOS', + 'SERUM | TESTOSBA', + 'SERUM | TESTOSFR', + 'SERUM | TESTOSWB', + 'SERUM | TSTFTSTT', + 'SERUM | TSTFWTST', + 'SERUM | TST4OH', + 'SERUM | ESTROGEN')) +doseRanks <- c('Vehicle', 'LD', 'MD', 'HD') + +############################## UI ############################################# +ui <- dashboardPage ( + dashboardHeader(title="Cross-Study Analysis", titleWidth = 350), + dashboardSidebar( + tags$head(tags$style(type = "text/css", " + #loadmessage { + position: relative; + top: 0px; + left: 0px; + width: 100%; + padding: 5px 0px 5px 0px; + text-align: center; + font-weight: bold; + font-size: 100%; + color: #000000; + background-color: #eef66c; + z-index: 1000; + } + ")), + #Coloring "Input" tabs as Midnight Blue, "Output" Tabs as White + tags$style(HTML(" + .tabbable > .nav > li > a {background-color: Floralwhite; color:black} + .tabbable > .nav > li > a[data-value='Data Source'] {background-color: MidnightBlue; color:white} + .tabbable > .nav > li[class=active] > a {background-color: DimGray; color:white} + ")), + + + actionBttn("PLOT", label = "Generate Visuals", color = "primary", + style = "jelly"), + sidebarMenu(id='sidebar', + radioButtons("sex", "Sex Selection:", + c("Male" = "M", + "Female" = "F", + "Male/Female" = "M/F"), selected = 'M'), + + radioButtons(inputId = "dose", label = "Dose Selection:", + c("HD" = "HD", + "MD" = "MD", + "LD" = "LD"), selected = 'HD'), + menuItem('Detailed Control', startExpanded = TRUE, + h5('Detailed Test Selection:') + ,shinyTree::shinyTree("tree",checkbox = TRUE), + pickerInput(inputId = "AGGMethod", + label = "Radar Aggregation Method", + c('mean', 'animalMax','endpointMax'), + selected = 'animalMax'), + pickerInput(inputId = 'bwMethod', + label = "BW Method", + c("BW","TERMBW"), selected = 'BW'), + pickerInput(inputId = 'omMethod', + label = "OM Ratio Method", + c("BrainRatio", "BWRatio", "Organ"), selected = 'BrainRatio')) + ) + ), + + dashboardBody( + conditionalPanel(condition = "$('html').hasClass('shiny-busy')", + tags$div("Loading...", id="loadmessage") + ), + ## shinyjs::useShinyjs(), + ## shinyjs::runcodeUI(), + + tabsetPanel( + tabPanel("Data Source", + column(width = 5,pickerInput(inputId = 'DataSourceChoice', + label = "Choose data source:", + c("Local","Database"), selected = "Database")), + conditionalPanel(condition = "input.DataSourceChoice == 'Local' ", + titlePanel("Select Local Folder for Repeat-Dose Study"), + shinyDirButton('folder','Select Folder Studies are in:', 'Please Select a Folder', FALSE) + ), + conditionalPanel(condition = "input.DataSourceChoice == 'Database' ", + titlePanel("Select Database StudyID"), + h4('List is limited to Parallel Studies with a MI Domain.'), + column(width=5, offset = 5, + uiOutput("Database.select.study"))), + column(width=5, offset = 5,conditionalPanel(condition = "input.DataSourceChoice == 'Local' & is.list(input.folder) == FALSE", + uiOutput("select.folder"))) + ), + tabPanel('Overall', + tabsetPanel( + tabPanel('Overall Radarplot', + uiOutput('ReactSummaryRadar')), + tabPanel('Overall Barplot', + column(width=10,fluidRow(cellWidths = c("50%","50%"), + uiOutput('ReactSummaryBar'), + uiOutput('ReactdisplayStudiesALL')))) + )), + tabPanel('Body Weight', + column(width = 5,pickerInput(inputId = 'bwMetric', + label = "BW Metric", + c("zScore","PercentChange"), selected = 'PercentChange')), + column(width = 5,pickerInput(inputId = "FWTime", + label = "FW Time Duration", + c("Week","Day"), selected = "Week")), + column(width = 10,plotOutput('FWplot')), + column(width = 10,plotOutput('BWplot')) + ), + tabPanel('Kidney', + tabsetPanel( + tabPanel('Overall', + uiOutput('ReactKidneyRadar')), + tabPanel('Kidney Barplot', + column(width=10,fluidRow(cellWidths = c("50%","50%"), + uiOutput('ReactKidneyBar'), + uiOutput('ReactdisplayStudiesKidney')))), + tabPanel('Clinical Chemistry', + plotOutput('KSERLBplot')), + tabPanel('Urinalysis', + plotOutput('KURILBplot')), + tabPanel('Organ Weights', + plotOutput('OMplot')), + tabPanel('Histopathology', + column(width = 5,pickerInput(inputId = 'KMIClustY', + label = "Cluster the Y Axis?", + c("NO","YES"), selected = 'NO')), + column(width = 5,pickerInput(inputId = 'KMIClustX', + label = "Cluster the X Axis?", + c("NO","YES"), selected = 'NO')), + column(width = 10,uiOutput('KMIplotreactive'))) + + ) + ), + tabPanel('Liver', + tabsetPanel( + tabPanel('Overall', + uiOutput('ReactLiverRadar')), + tabPanel('Liver Barplot', + column(width=10,fluidRow(cellWidths = c("50%","50%"), + uiOutput('ReactLiverBar'), + uiOutput('ReactdisplayStudiesLiver')))), + tabPanel('Clincal Chemistry', + plotOutput('LSERLBplot')), + tabPanel('Organ Weights', + plotOutput('LOMplot')), + tabPanel('Histopathology', + column(width = 5,pickerInput(inputId = 'LMIClustY', + label = "Cluster the Y Axis?", + c("NO","YES"), selected = 'NO')), + column(width = 5,pickerInput(inputId = 'LMIClustX', + label = "Cluster the X Axis?", + c("NO","YES"), selected = 'NO')), + column(width = 10, uiOutput('LMIplotreactive')))), + ), + tabPanel('Hematopoietic', + tabsetPanel( + tabPanel('Overall', + uiOutput('ReactHemaRadar')), + tabPanel('Hematopoietic Barplot', + column(width=10,fluidRow(cellWidths = c("50%","50%"), + uiOutput('ReactHemaBar'), + uiOutput('ReactdisplayStudiesHema')))), + tabPanel('Hematology', + plotOutput('HHEMELBplot')), + tabPanel('Organ Weights', + plotOutput('HOMplot')), + tabPanel('Histopathology', + column(width = 5,pickerInput(inputId = 'HMIClustY', + label = "Cluster the Y Axis?", + c("NO","YES"), selected = 'NO')), + column(width = 5,pickerInput(inputId = 'HMIClustX', + label = "Cluster the X Axis?", + c("NO","YES"), selected = 'NO')), + column(width=10,fluidRow(splitLayout(cellWidths = c("50%","50%"), + uiOutput('HMIplotreactive'), + uiOutput('HMIplotreactive2')))), + column(width=10,fluidRow(splitLayout(cellWidths = c("50%","50%"), + uiOutput('HMIplotreactive4'), + uiOutput('HMIplotreactive5')))), + column(width=10,fluidRow(uiOutput('HMIplotreactive3')))) + )), + tabPanel('Endocrine', + tabsetPanel( + tabPanel('Overall', + uiOutput('ReactEndoRadar')), + tabPanel('Endocrine Barplot', + column(width=10,fluidRow(cellWidths = c("50%","50%"), + uiOutput('ReactEndocrineBar'), + uiOutput('ReactdisplayStudiesEndocrine')))), + tabPanel('Clinical Chemistry', + plotOutput('ESERLBplot')), + tabPanel('Organ Weights', + plotOutput('EOMplot',height = 600)), + tabPanel('Histopathology', + column(width = 5,pickerInput(inputId = 'EMIClustY', + label = "Cluster the Y Axis?", + c("NO","YES"), selected = 'NO')), + column(width = 5,pickerInput(inputId = 'EMIClustX', + label = "Cluster the X Axis?", + c("NO","YES"), selected = 'NO')), + column(width=10,fluidRow(splitLayout(cellWidths = c("50%","50%"), + uiOutput('EMIplotreactive'), + uiOutput('EMIplotreactive2')))), + column(width=10,fluidRow(splitLayout(cellWidths = c("50%","50%"), + uiOutput('EMIplotreactive3'), + uiOutput('EMIplotreactive4')))), + column(width=10,fluidRow(splitLayout(cellWidths = c("50%","50%"), + uiOutput('EMIplotreactive5')))) + ))), + tabPanel('Reproductive', + tabsetPanel( + tabPanel('Overall', + uiOutput('ReactReproRadar')), + tabPanel('Reproductive Barplot', + column(width=10,fluidRow(cellWidths = c("50%","50%"), + uiOutput('ReactReproductiveBar'), + uiOutput('ReactdisplayStudiesReproductive')))), + tabPanel('Organ Weights', + plotOutput('ROMplot',height = 600)), + tabPanel('Histopathology', + column(width = 5,pickerInput(inputId = 'RMIClustY', + label = "Cluster the Y Axis?", + c("NO","YES"), selected = 'NO')), + column(width = 5,pickerInput(inputId = 'RMIClustX', + label = "Cluster the X Axis?", + c("NO","YES"), selected = 'NO')), + column(width=10,fluidRow(splitLayout(cellWidths = c("50%","50%"), + uiOutput('RMIplotreactive'), + uiOutput('RMIplotreactive2')))), + column(width=10,fluidRow(splitLayout(cellWidths = c("50%","50%"), + uiOutput('RMIplotreactive3'), + uiOutput('RMIplotreactive4')))), + column(width=10,fluidRow(splitLayout(cellWidths = c("50%","50%"), + uiOutput('RMIplotreactive5'), + uiOutput('RMIplotreactive6')))), + column(width=10,fluidRow(splitLayout(cellWidths = c("50%","50%"), + uiOutput('RMIplotreactive7'), + uiOutput('RMIplotreactive8'))))) + )) + ) + ), +) + +############################### Server ####################################### + server <- function(input, output, session) { + + shinyDirChoose(input, 'folder', roots=c(wd="."), filetypes = c('', '.xpt')) + plotHeight <- reactiveValues(X=defaultVal) + numSEX <- reactiveValues(X = 1) + + output$select.folder <- renderUI ({ + if (input$DataSourceChoice == "Local" && is.list(input$folder) == TRUE){ + selectInput(inputId = "LocalStudies", + label = "Choose Studies", + choices = list.dirs(path = paste0(homePath, + paste(unlist(input$folder$path), + collapse = '/')), + full.names = FALSE), + multiple = TRUE) + } + }) + + output$Database.select.study <- renderUI({ + if (input$DataSourceChoice == "Database"){ + + shiny::tagList( + shiny::selectizeInput(inputId = 'ind', label= 'Select IND', + choices= dbStudys$APPID, + multiple= TRUE), + + selectInput(inputId = "DatabaseStudies", + label = "Choose Database StudyIDs", + ## NEED TO REWRITE BELOW + ## choices = dbStudys$CombinedName, + choices = NULL, + multiple = TRUE, + ## selected = two_works + ) + + ) + } + }) + +## update studyid selection when IND changes + + shiny::observeEvent(input$ind, { + ind_selected <- input$ind + print(ind_selected) + index <- which(dbStudys$APPID %in% ind_selected) + df <- dbStudys[index, ] + + studies <- unique(df[['STUDYID']]) + + studies_four_treatment_group <- get_treatment_group(studies=studies, + db_path=database_path) + studies_four <- studies_four_treatment_group[['four_trtm_group']] + df_four <- df[STUDYID %in% studies_four,] + chc <- df_four$CombinedName + shiny::updateSelectInput(session = session, inputId = 'DatabaseStudies', + choices = chc) + + }) + + + + observeEvent(input$PLOT,{ + #Remake the plot values based on User Selection + ####Controllable Variables############### + + dataSource <- input$DataSourceChoice + #Convert Concatenated Names back to STUDYIDs + DatabaseStudies <- dbStudys$STUDYID[which(dbStudys$CombinedName %in% input$DatabaseStudies)] + + #Find number of StudyIDs + numstudies <- length(DatabaseStudies) + + for (j in 1:numstudies){ + Name <- paste0('SENDStudy',as.character(j)) + #Pull relevant domain data for each domain + bw <- sendigR::genericQuery(dbtoken, queryString = "SELECT * FROM BW WHERE STUDYID = (:1)", + queryParams = DatabaseStudies[j]) + dm <- sendigR::genericQuery(dbtoken, queryString = "SELECT * FROM DM WHERE STUDYID = (:1)", + queryParams = DatabaseStudies[j]) + ex <- sendigR::genericQuery(dbtoken, queryString = "SELECT * FROM EX WHERE STUDYID = (:1)", + queryParams = DatabaseStudies[j]) + fw <- sendigR::genericQuery(dbtoken, queryString = "SELECT * FROM FW WHERE STUDYID = (:1)", + queryParams = DatabaseStudies[j]) + lb <- sendigR::genericQuery(dbtoken, queryString = "SELECT * FROM LB WHERE STUDYID = (:1)", + queryParams = DatabaseStudies[j]) + mi <- sendigR::genericQuery(dbtoken, queryString = "SELECT * FROM MI WHERE STUDYID = (:1)", + queryParams = DatabaseStudies[j]) + om <- sendigR::genericQuery(dbtoken, queryString = "SELECT * FROM OM WHERE STUDYID = (:1)", + queryParams = DatabaseStudies[j]) + ts <- sendigR::genericQuery(dbtoken, queryString = "SELECT * FROM TS WHERE STUDYID = (:1)", + queryParams = DatabaseStudies[j]) + ta <-sendigR::genericQuery(dbtoken, queryString = "SELECT * FROM TA WHERE STUDYID = (:1)", + queryParams = DatabaseStudies[j]) + + pooldef <- sendigR::genericQuery(dbtoken, queryString = "SELECT * FROM POOLDEF WHERE STUDYID = (:1)", + queryParams = DatabaseStudies[j]) + #Combine into list of assigned name + assign(Name, list('bw' = bw, 'dm' = dm,'ex' = ex, 'fw' = fw, 'pooldef'=pooldef, + 'lb' = lb, 'mi' = mi, 'om'=om, 'ts'=ts, 'ta'=ta)) + print(paste0(Name, " = ", input$DatabaseStudies[j])) + } + #Check that SEND studies loaded are repeat-dose and have 4 doses (vehicle to high-dose) + for (nj in 1:numstudies){ + Name <- paste0('SENDStudy',as.character(nj)) + #Get Study Type + SSTYP <- get(Name)$ts$TSVAL[which(get(Name)$ts$TSPARMCD == "SSTYP")] + #Error if SSTYP is not Repeat Dose Toxicity + if (SSTYP %in% c("REPEAT DOSE TOXICITY", "REPEAT-DOSE TOXICITY", + "Repeat-Dose Toxicity", "Repeat Dose Toxicity") == FALSE){ + showNotification(paste0(input$LocalStudies[nj], " is not a Repeat-Dose Toxicity Study"), type = "error") + return() + } + #Get Number of Doses + StudyARMCDs <- unique(get(Name)$ta$ARMCD) + StudyARMCDs <- StudyARMCDs[which(grepl("R",StudyARMCDs) == FALSE)] #Remove Recovery Permutations + } + + #Check two or more studies chosen Studies Chosen + if (numstudies<2){ + showNotification("Two Datasets Must be selected", type = "error") + } else { + chosenstudies <- input$studies + #organSystems for grouping of tests + organSystems <- c('LIVER', 'KIDNEY', 'HEMATOPOIETIC','ENDOCRINE','REPRODUCTIVE') + + #Find Selected Tests from shinyTree ouput + TreeSelect <- input$tree + SelectedDomainTests <- names(unlist(shinyTree::get_selected(input$tree, format = "slices"))) + #Check Which Domains are Selected and update organSystems + systemsselected <- toupper(unlist(strsplit(SelectedDomainTests,"[.]"))) + organSystems <- toupper(unique(systemsselected[which(systemsselected %in% organSystems)])) + #Convert Selected Tests to usable format + SelectedLBTests <- SelectedDomainTests[which(grepl("Laboratory",SelectedDomainTests) == TRUE)] + SelectedOMTests <- SelectedDomainTests[which(grepl("Weight",SelectedDomainTests) == TRUE)] + SelectedMITests <- SelectedDomainTests[which(grepl("Histopathology",SelectedDomainTests) == TRUE)] + #Remove all but Lowest Levels of Tree (Values which have 3 '.') + SelectedLBTests <- SelectedLBTests[which(stringr::str_count(SelectedLBTests, "[.]") == 3)] + SelectedMITests <- SelectedMITests[which(stringr::str_count(SelectedMITests, "[.]") == 2)] + SelectedOMTests <- SelectedOMTests[which(stringr::str_count(SelectedOMTests, "[.]") == 2)] + SelectedLBTests <- as.data.frame(strsplit(SelectedLBTests,"[.]")) + SelectedMITests <- as.data.frame(strsplit(SelectedMITests,"[.]")) + SelectedOMTests <- as.data.frame(strsplit(SelectedOMTests,"[.]")) + SelectedLBTests <- SelectedLBTests[c(1,4),] + SelectedMITests <- SelectedMITests[c(1,3),] + SelectedOMTests <- SelectedOMTests[c(1,3),] + SelectedLBTests <- t(SelectedLBTests) + SelectedOMTests <- t(SelectedOMTests) + SelectedMITests <- t(SelectedMITests) + rownames(SelectedLBTests) <- NULL + rownames(SelectedOMTests) <- NULL + rownames(SelectedMITests) <- NULL + #Update organTESTCDlist by separating by organsystem + for (organSystem in organSystems){ + #Limit to organ System + Tests <- SelectedLBTests[which(toupper(SelectedLBTests[,1]) %in% organSystem),2] + MITESTS <- SelectedMITests[which(toupper(SelectedMITests[,1]) %in% organSystem),2] + OMTESTS <- SelectedOMTests[which(toupper(SelectedOMTests[,1]) %in% organSystem),2] + #update relavant organTESTCDlist + organTESTCDlist[[organSystem]] <- Tests + ## Update MITESTCDlist FOR OM AND MI using dataframes made above + MITESTCDlist[[organSystem]] <- as.character(MITESTS) + OMTESTCDlist[[organSystem]] <- as.character(OMTESTS) + } + + + + + #End point aggregation Method (for Radar): 'mean', 'animalMax', or 'endpointMax' + aggregationMethod <- input$AGGMethod + + #BW Control Variables + BWMethod <- input$bwMethod + + #OM Metric: BrainRatio, BWRatio, or Organ + OMMetric <- input$omMethod + + SEX <- input$sex + if (SEX == "M/F"){ + SEX <- c("M","F") + plotHeight$X <- 700 + numSEX$X <- 2 + } else { + plotHeight$X <- 350 + numSEX$X <- 1 + } + #Check that Gender and Detailed Test Work + if ('M' %in% SEX & 'REPRODUCTIVE' %in% organSystems){ + if (any(c('EPIDIDYMIS','GLAND, PROSTATE','PROSTATE','TESTIS') %in% c(MITESTCDlist$REPRODUCTIVE,OMTESTCDlist$REPRODUCTIVE)) == FALSE){ + showNotification("REPRODUCTIVE must include MI/OM from Sex Selected", type = "error") + return(NULL) + stop() + } + } + if ('F' %in% SEX & 'REPRODUCTIVE' %in% organSystems) { + if (any(c('CERVIX','GLAND, MAMMARY','OVARY','UTERUS','VAGINA') %in% c(MITESTCDlist$REPRODUCTIVE,OMTESTCDlist$REPRODUCTIVE)== FALSE)){ + showNotification("REPRODUCTIVE must include MI/OM from Sex Selected", type = "error") + return(NULL) + stop() + } + } + #Select Dose Option for Visualization: 'Vehicle', 'LD','MD','HD + Dose <- input$dose + + #Clear RDS Data + summaryResults <- list() + MIresults <- list() + LBresults <- list() + OMresults <- list() + summaryData <- data.frame() + ##### Load in Data ########## + #Load Data Pertaining to all organSystems + for (Gender in SEX){ + #Create Shared Data Frame with StudyID, Species, USUBJID, SEX, and DOSES +# datasource database ############### + #Make CompileData with DM of all animals + CompileData <- data.frame(StudyID = NA, Species = NA, USUBJID = NA, SEX = NA, ARMCD = NA) + SENDStudyLookup <- data.frame(Name = NA, StudyID = NA) + for (nj in 1:numstudies){ + Name <- paste0('SENDStudy',as.character(nj)) + #Pull all of the relevant DM Data + Species <- get(Name)$ts$TSVAL[which(get(Name)$ts$TSPARMCD == "SPECIES")] + TRTName <- get(Name)$ts$TSVAL[which(get(Name)$ts$TSPARMCD == "TRT")] + Duration <-get(Name)$ts$TSVAL[which(get(Name)$ts$TSPARMCD == "DOSDUR")] + DelMethod <-get(Name)$ts$TSVAL[which(get(Name)$ts$TSPARMCD == "ROUTE")] + #Convert duration to days + if (grepl("W",Duration) ==TRUE){ + days <- as.numeric(gsub("\\D","",Duration))*7 + } else if (grepl("M",Duration) == TRUE){ + days <- as.numeric(gsub("\\D","",Duration))*7*30 + } else { + days <- as.numeric(gsub("\\D","",Duration)) + } + Duration <- paste0(days,"D") + #Make StudyID + StudyID <- paste0(Species, " ", TRTName," ",DelMethod," ",Duration) + SENDStudyLookup <- rbind(SENDStudyLookup, c(Name,StudyID)) + DMData <- data.frame(StudyID = rep(StudyID, length(get(Name)$dm$USUBJID)), + Species = rep(Species, length(get(Name)$dm$USUBJID)), + USUBJID = get(Name)$dm$USUBJID, + SEX = get(Name)$dm$SEX, + ARMCD = get(Name)$dm$ARMCD) + #Remove T from ARMCD for groups that include it for "treatment" + DMData$ARMCD <- gsub('T','',DMData$ARMCD) + #Add to CompileData + CompileData <- rbind(CompileData, DMData) + } + #remove NA from first line + CompileData <- na.omit(CompileData) + + #CHeck for TK Animals + if ("RAT" %in% CompileData$Species){ + #Check which SENDStudies are Rat + RatStudies <- CompileData[which(CompileData$Species == "RAT"), ] + StoreTKIndv <- list() + #Go back to SENDStudy# dataframe and pull pp poolIDs + for (studies in 1:length(unique(RatStudies$StudyID))){ + study <- unique(RatStudies$StudyID)[studies] + Name <- SENDStudyLookup$Name[which(SENDStudyLookup$StudyID == study)] + TKPools <- unique(get(Name)$pp$POOLID) + TKIndv <- get(Name)$pooldef$USUBJID[which(get(Name)$pooldef$POOLID %in% TKPools)] + #Check if all treated animals are TK Animals >> Include them if true + StudyData <- CompileData[which(CompileData$StudyID %in% study),] + StudyData <- StudyData[!(StudyData$USUBJID %in% c(TKIndv)),] + if (length(unique(StudyData$ARMCD)) == 1){ + + } else { + StoreTKIndv <- append(StoreTKIndv, TKIndv, after = length(StoreTKIndv)) + #Remove TK animals from CompileData + CompileData <- CompileData[!(CompileData$USUBJID %in% c(TKIndv)),] + } + } + } + #Remove Recovery Animals and Recode Treatment Ranks + ## saveRDS(CompileData, file='compile.rds') + AllData <- CompileData + CompileData <- CompileData[!stringr::str_detect(CompileData$ARMCD, "R"),] + CompileData$ARMCD <- as.numeric(CompileData$ARMCD) + CompileData$ARMCD <- factor(CompileData$ARMCD) + if (length(unique(CompileData$ARMCD))>4){ + #error catch for accidental inclusion of other arm numbers + CompileData <- CompileData[which(CompileData$ARMCD %in% c(1,2,3,4)),] + CompileData$ARMCD <- as.factor(as.numeric(CompileData$ARMCD)) + } + levels(CompileData$ARMCD) <- doseRanks + if (Gender == 'M') { + CompileData <- CompileData[which(CompileData$SEX == Gender),] + } else if (Gender == 'F') { + CompileData <- CompileData[which(CompileData$SEX == Gender),] + } + # BW- + #Find Terminal and Initial BW for all studies + #Make InitialWeight Formatting Data Frame + InitialWeight <- data.frame("STUDYID" = NA, "USUBJID" = NA, + "BWSTRESN" = NA,"VISITDY" = NA) + BodyWeight <- data.frame("STUDYID" = NA, "USUBJID" = NA, + "BWSTRESN" = NA,"VISITDY" = NA) + for (nj in 1:numstudies){ + ## browser() + Name <- paste0('SENDStudy',as.character(nj)) + #Check that "VISITDY" is used, + if (any(get(Name)$bw$VISITDY[which((get(Name)$bw$VISITDY <= 1))])){ + # if there are pre-study weights include them + StudyInitialWeight <- get(Name)$bw[which((get(Name)$bw$VISITDY <= 1)), + c("STUDYID", "USUBJID", "BWSTRESN","VISITDY")] + StudyBodyWeight <- get(Name)$bw[which(get(Name)$bw$BWTESTCD == "BW"), + c("STUDYID", "USUBJID", "BWSTRESN","VISITDY")] + } else { + #Change BWDY to VISIDY + StudyInitialWeight <- get(Name)$bw[which((get(Name)$bw$BWDY <= 1)), + c("STUDYID", "USUBJID", "BWSTRESN","BWDY")] + StudyBodyWeight <- get(Name)$bw[which(get(Name)$bw$BWTESTCD == "BW"), + c("STUDYID", "USUBJID", "BWSTRESN","BWDY")] + colnames(StudyInitialWeight) <- c("STUDYID", "USUBJID", "BWSTRESN","VISITDY") + colnames(StudyBodyWeight) <- c("STUDYID", "USUBJID", "BWSTRESN","VISITDY") + } + #Store Values + InitialWeight <- rbind(InitialWeight,StudyInitialWeight) + BodyWeight <- rbind(BodyWeight, StudyBodyWeight) + } + #Remove NA Values at the start + InitialWeight <- na.omit(InitialWeight) + BodyWeight <- na.omit(BodyWeight) + #If RAT Studies included remove TK Values + if ("RAT" %in% CompileData$Species){ + InitialWeight <- InitialWeight[!(InitialWeight$USUBJID %in% c(StoreTKIndv)),] + BodyWeight <- BodyWeight[!(BodyWeight$USUBJID %in% c(StoreTKIndv)),] + } + #Load in TermBW + if (BWMethod == "TERMBW"){ + TermBodyWeight <- data.frame(STUDYID = NA, USUBJID = NA, BWSTRESN = NA) + for (nj in 1:numstudies){ + Name <- paste0('SENDStudy',as.character(nj)) + TermBodyWeight <- get(Name)$bw[which(get(Name)$bw$BWTESTCD == "TERMBW"), + c("STUDYID", "USUBJID", "BWSTRESN")] + } + TermBodyWeight <- na.omit(TermBodyWeight) + #If RAT Studies included remove TK Values + if ("RAT" %in% CompileData$Species){ + TermBodyWeight <- TermBodyWeight[!(TermBodyWeight$USUBJID %in% c(StoreTKIndv)),] + } + } else if (BWMethod == "BW"){ + TermBodyWeight <- data.frame(USUBJID = unique(BodyWeight$USUBJID), + BWSTRESN = NA) + for (Indv in unique(BodyWeight$USUBJID)){ + IndvTerm <- BodyWeight[which(BodyWeight$USUBJID == Indv),] + InitialW <- IndvTerm[which(IndvTerm$VISITDY <= 0),c("BWSTRESN","VISITDY")] + if (nrow(InitialW) == 0){ #error catch for animals missing pre-study + InitialW <- IndvTerm[which(IndvTerm$VISITDY <= 1),c("BWSTRESN","VISITDY")] + } + InitialW <- as.numeric(InitialW$BWSTRESN[which(InitialW$VISITDY == max(InitialW$VISITDY),)]) + IndvTerm$Diff <- abs(as.numeric(IndvTerm$BWSTRESN) - InitialW) + maxdiff <- max(as.numeric(IndvTerm$Diff), na.rm = TRUE) ## Find largest difference from initial + index <- which(TermBodyWeight$USUBJID == Indv) + TermBodyWeight$BWSTRESN[index] <- unique(IndvTerm$BWSTRESN[which(as.numeric(IndvTerm$Diff) == maxdiff)]) + } + TermBodyWeight$BWSTRESN <- as.numeric(TermBodyWeight$BWSTRESN) + #If RAT Studies included remove TK Values + if ("RAT" %in% CompileData$Species){ + TermBodyWeight <- TermBodyWeight[!(TermBodyWeight$USUBJID %in% c(StoreTKIndv)),] + } + } + ## } + #Make Numeric + if (is.factor(TermBodyWeight$BWSTRESN)) { + TermBodyWeight$BWSTRESN <- as.numeric(levels(TermBodyWeight$BWSTRESN)[TermBodyWeight$BWSTRESN]) + InitialWeight$BWSTRESN <- as.numeric(levels(InitialWeight$BWSTRESN)[InitialWeight$BWSTRESN]) + } else { + TermBodyWeight$BWSTRESN <- as.numeric(TermBodyWeight$BWSTRESN) + InitialWeight$BWSTRESN <- as.numeric(InitialWeight$BWSTRESN) + BodyWeight$BWSTRESN <- as.numeric(BodyWeight$BWSTRESN) + } + CompileData <- merge(CompileData, TermBodyWeight, by = "USUBJID") + #Subtract Starting Weight + CompileData$BWSub <- NA + CompileData$BWBaseline <- NA + BodyWeight$BWSub <- NA + BodyWeight$BaselinePercentChange <- NA + BodyWeight$Baseline <- NA + for (indv in unique(InitialWeight$USUBJID)){ + Relvdata <- CompileData[which(CompileData$USUBJID == indv),] + inx <- which(CompileData$USUBJID == indv) + BWinx <- which(BodyWeight$USUBJID == indv) + InitialW <- InitialWeight[which(InitialWeight$USUBJID == indv),c("BWSTRESN","VISITDY")] + InitialW <- as.numeric(InitialW$BWSTRESN[which(InitialW$VISITDY == max(InitialW$VISITDY),)]) + CompileData$BWSub[inx] <- CompileData$BWSTRESN[inx]-InitialW + CompileData$BWBaseline[inx] <- InitialW + BodyWeight$Baseline[BWinx] <- InitialW + BodyWeight$BWSub[BWinx] <- as.numeric(BodyWeight$BWSTRESN[BWinx]) - InitialW + BodyWeight$BaselinePercentChange[BWinx] <- BodyWeight$BWSub[BWinx]/InitialW*100 + } + + #Make Compile Data BWzScore for Scoring + CompileData$BWzScore <- NA + for (study in unique(CompileData$StudyID)){ + stdyidx <- which(CompileData$StudyID %in% study) + Controlanimals <- CompileData[which(CompileData$ARMCD == "Vehicle" & CompileData$StudyID %in% study),] + ControlBaselinemean <- mean(Controlanimals$BWSub) + ControlBaseSD <- sd(Controlanimals$BWSTRESN) + CompileData$BWzScore[stdyidx] <- (CompileData$BWSub[stdyidx] - ControlBaselinemean )/ControlBaseSD + } + if (BWMethod == "BW"){ + BodyWeight <- merge(BodyWeight, CompileData[,c('USUBJID','SEX','StudyID','ARMCD')], by='USUBJID') + BodyWeightSummary[[Gender]] <- BodyWeight + } + if (BWMethod == "TERMBW"){ + BodyWeight <- NA + BodyWeight <- merge(TermBodyWeight[,c("USUBJID","BWSTRESN")], CompileData[,c("USUBJID","Species","ARMCD","SEX", "StudyID", "BWSub","BWBaseline")], + by='USUBJID') + BodyWeightSummary[[Gender]] <- BodyWeight + } + + #FW- + #Check Number of Species in Compile Data + NumSpecies <- unique(CompileData$Species) + #Make Blank Data Frame + DailyFood <- data.frame(ARMCD = "0", FWDY = 0, FWSTRESN = 0, Compound = '0', + Species = NA, Diff = 0) + for (TypeSpecies in NumSpecies){ + #Get StudyIDs for Studies in this species + SpeciesIDs <- CompileData$StudyID[which(CompileData$Species == TypeSpecies)] + SpeciesFood <- data.frame(ARMCD = "0", FWDY = 0, FWSTRESN = 0, Compound = '0') + ##Load in Studies FW + for (study in unique(SpeciesIDs)){ + Name <- SENDStudyLookup$Name[which(SENDStudyLookup$StudyID == study)] + TRTName <- get(Name)$ts$TSVAL[which(get(Name)$ts$TSPARMCD == "TRT")] + Species <- get(Name)$ts$TSVAL[which(get(Name)$ts$TSPARMCD == "SPECIES")] + #Check that there is a FW Domain + if (is.null(get(Name)$fw) == TRUE){ + if (is.null(get(Name)$cl) == TRUE){ + #Skips Study if it has neither cl or fw + + } else { + #Converting cl into fw + FoodData <- merge(CompileData[which(CompileData$StudyID == study),c("USUBJID","StudyID","Species","SEX","ARMCD")], + get(Name)$cl[,c("USUBJID", "CLDY","CLSTRESC")]) + #Convert Categorical to Numeric % + FoodDataSum <- FoodData %>% + dplyr::mutate(CLSTRESC = case_when(CLSTRESC == "NORMAL" ~ 1.0 + ,CLSTRESC == "Food Consumption, reduced" ~ 0.5 + ,CLSTRESC == "Food Consumption, minimal" ~ 0.25 + ,TRUE ~ 0 + )) + #Rename Column names to match Dog6576 + names(FoodDataSum)[6] <- "FWDY" + names(FoodDataSum)[7] <- "FWSTRESN" + FoodDataSum <- FoodDataSum %>% #Average by Treatment Group per Day + group_by(ARMCD,FWDY) %>% summarise_at(vars(FWSTRESN),mean) + FoodDataSum$FWDY <- as.numeric(FoodDataSum$FWDY) + FoodDataSum$Compound <- rep(TRTName, nrow(FoodDataSum)) + SpeciesFood <-rbind(SpeciesFood,FoodDataSum) + } + } else { + #Check if study is a rat study due to pooled housing + if (Species %in% c("RAT","Rat","rat")){ + if ("POOLID" %in% colnames(get(Name)$fw)){ + PoolFoodData <- merge(get(Name)$pooldef, + get(Name)$fw[,c("POOLID","FWDY","FWSTRESN")], + allow.cartesian = TRUE, + by = "POOLID") + } else { #Accounting for studies that don't pool rats + PoolFoodData <- get(Name)$fw[,c("USUBJID","FWDY","FWSTRESN")] + } + FoodData <- merge(CompileData[which(CompileData$StudyID == study),c("USUBJID","StudyID","Species","SEX","ARMCD")], + PoolFoodData[,c("USUBJID", "FWDY","FWSTRESN")], by = "USUBJID") + #Remove TK Animals + FoodData <- FoodData[!(FoodData$USUBJID %in% c(StoreTKIndv)),] + #Average by Treatment Group per Day + FoodDataSum <- FoodData %>% + group_by(ARMCD,FWDY) %>% summarise_at(vars(FWSTRESN),mean) + FoodDataSum$Compound <- rep(TRTName,nrow(FoodDataSum)) + SpeciesFood <- rbind(SpeciesFood,FoodDataSum) + } else { + #Non Pooled Rat Load + FoodData <- merge(CompileData[which(CompileData$StudyID == study), c("USUBJID","StudyID","Species","SEX","ARMCD")], + get(Name)$fw[,c("USUBJID", "FWDY","FWSTRESN")], by = "USUBJID") + FoodDataSum <- FoodData %>% + group_by(ARMCD,FWDY) %>% summarise_at(vars(FWSTRESN),mean) + FoodDataSum$Compound <- rep(TRTName,nrow(FoodDataSum)) + SpeciesFood <- rbind(SpeciesFood,FoodDataSum) + } + } + } + #Remove formatting + SpeciesFood$FWSTRESN <- as.numeric(SpeciesFood$FWSTRESN) + SpeciesFood <- na.omit(SpeciesFood) + #Take Average consumption of Pre-Study Animals + PreStudy <- SpeciesFood[which(SpeciesFood$FWDY <=0),] + MeanFC <- mean(PreStudy$FWSTRESN, na.rm = TRUE) + if (MeanFC == 0){ #IF there is no prestudy only use the first day + PreStudy <- SpeciesFood[which(SpeciesFood$FWDY <=1),] + MeanFC <- mean(PreStudy$FWSTRESN, na.rm = TRUE) + } + #Normalize FWStresn for comparisson using Average + SpeciesFood$FWSTRESN <- (SpeciesFood$FWSTRESN/MeanFC) + ##Make DataFrame per Species + FoodDaily <- SpeciesFood %>% + group_by(FWDY, Compound) %>% + arrange(FWDY) %>% + mutate(Diff = FWSTRESN - lag(FWSTRESN, default = first(FWSTRESN))) + FoodDaily$Species <- rep(TypeSpecies, nrow(FoodDaily)) + #Store Values in DailyFood + DailyFood <- rbind(DailyFood, FoodDaily) + } + #Remove Formatting line + DailyFood <- na.omit(DailyFood) + #Spit out FWData dataframe of all species + FWData <- DailyFood + ## } + FWDataSummary[[Gender]] <- FWData + CompileDataPrime <- CompileData + + ##################### Organ System Specific Graphs ###################### + #Will Run through all of the possible organSystems to generate graphs and fill CompileData + for (organSystem in organSystems) { + MIDOMAIN <- organSystem + Organ <- MIDOMAIN #For OM, will automatically include brain for brain ratio + #Make LB Data Data Frame to Hold Information + # LB- + LBData <- data.frame("USUBJID" = NA,"LBSPEC" = NA,"LBTESTCD" = NA, + "LBSTRESN" = NA, "VISITDY" = NA) + for (nj in 1:numstudies){ + Name <- paste0('SENDStudy',as.character(nj)) + #Pull all of the relevant LB Data + if ("LBDY" %in% colnames(get(Name)$lb) == TRUE){ + LBD <- get(Name)$lb[which((get(Name)$lb$LBDY >= 1)), + c("USUBJID","LBSPEC","LBTESTCD","LBSTRESN", "LBDY")] + colnames(LBD) <- c("USUBJID","LBSPEC","LBTESTCD","LBSTRESN", "VISITDY") + if (all(is.na(LBD$LBSPEC)) == TRUE){ + #Convert LBCAT to LBSPEC if no LBSPEC + LBD$LBSPEC <- get(Name)$lb[which((get(Name)$lb$LBDY >= 1)), + c("LBCAT")] + if (c("HEMATOLOGY", "Hematology","hematology") %in% levels(LBD$LBSPEC)){ + levels(LBD$LBSPEC)[match(c("HEMATOLOGY", "Hematology","hematology"), + levels(LBD$LBSPEC))] <- "WHOLE BLOOD" + } + if (c("CLINICAL CHEMISTRY","Clinical Chemistry") %in% levels(LBD$LBSPEC)){ + levels(LBD$LBSPEC)[match(c("CLINICAL CHEMISTRY","Clinical Chemistry"), + levels(LBD$LBSPEC))] <- "SERUM" + } + if (c("URINALYSIS","Urinalysis") %in% levels(LBD$LBSPEC)){ + levels(LBD$LBSPEC)[match(c("URINALYSIS","Urinalysis"), + levels(LBD$LBSPEC))] <- "URINE" + } + } + } else { + LBD <- get(Name)$lb[which((get(Name)$lb$VISITDY >= 1)), + c("USUBJID","LBSPEC","LBTESTCD","LBSTRESN", "VISITDY")] + } + #Add to CompileData + LBData <- rbind(LBData, LBD) + } + LBData <- na.omit(LBData) + # Concatenate LBSPEC and LBTESTCD + LBData$LBTESTCD <- paste(LBData$LBSPEC, LBData$LBTESTCD, sep = ' | ') + #Remove Not Included Tests + organIndex <- which(LBData$LBTESTCD %in% organTESTCDlist[[organSystem]]) + LBData <- LBData[organIndex,] + #Check if LBData has become empty + if (nrow(LBData) == 0){ + #Removes empty LBData from FINALDAYS + #print(paste0("No LB TESTS SELECTED in ", organSystem)) + } else { + #Make list of Recovery Animals + RecoveryAnimals<-unique(subset(LBData$USUBJID, !(LBData$USUBJID %in% CompileData$USUBJID))) + #Find Final Day for Before Recovery for Recovery Animals + RecovData <- LBData[which(LBData$USUBJID %in% RecoveryAnimals),] + RecovData <- RecovData[which(RecovData$VISITDY < 40),] #set manually for Biocelerate Studies + FinalDays <- NA + for (indv in unique(LBData$USUBJID)){ + indvtests <- LBData[which(LBData$USUBJID == indv), "LBTESTCD"] + for (TEST in unique(indvtests)){ + if (indv %in% RecoveryAnimals){ + Indv <- which(RecovData$USUBJID == indv) + IndvData <- RecovData[Indv,] + IndvData <- IndvData[which(IndvData$LBTESTCD == TEST),] + maxday <- suppressWarnings(max(IndvData$VISITDY)) + } else { + Indv <- which(LBData$USUBJID == indv) + IndvData <- LBData[Indv,] + IndvData <- IndvData[which(IndvData$LBTESTCD == TEST),] + maxday <- suppressWarnings(max(IndvData$VISITDY)) + } + LastTest <- which(LBData$USUBJID == indv & LBData$VISITDY == maxday) + FinalDays <- append(FinalDays, LastTest) + } + } + FinalDays <- unique(FinalDays) #Removes accidentally created duplicates in FINAL DAYS + LBData <- LBData[FinalDays, c("USUBJID","LBSPEC","LBTESTCD","LBSTRESN")] + } + # MI- + #MI Values included in grouped systems replace MIDOMAIN and Organ for analysis + Group <- MIDOMAIN + MIDOMAIN <-MITESTCDlist[[organSystem]] + Organ <- OMTESTCDlist[[organSystem]] + #Make DataFrame to hold MI Information + #Add Load of MIData + MIData <- data.frame("USUBJID" = NA,"MISTRESC" = NA,"MISEV" = NA, + "MISPEC" = NA) + for (nj in 1:numstudies){ + Name <- paste0('SENDStudy',as.character(nj)) + #Pull all of the relevant MI Data using Grepl for language variances (such as added (s)) + MBD <- get(Name)$mi[which(grepl(MIDOMAIN, get(Name)$mi$MISPEC) == TRUE), + c("USUBJID", "MISTRESC","MISEV","MISPEC")] + #Add to CompileData + MIData <- rbind(MIData, MBD) + } + #MAKE NA Sev's a 0 + MIData$MISEV = MIData$MISEV %>% tidyr::replace_na("0") + MIData <- na.omit(MIData) + ## } + MIData$MISTRESC <- toupper(MIData$MISTRESC) + #Convert Severity + MIData$MISEV <- stringr::str_replace_all(MIData$MISEV, "1 OF 5", "1") + MIData$MISEV <- stringr::str_replace_all(MIData$MISEV, "MINIMAL", "1") + MIData$MISEV <- stringr::str_replace_all(MIData$MISEV, "2 OF 5", "2") + MIData$MISEV <- stringr::str_replace_all(MIData$MISEV, "MILD", "2") + MIData$MISEV <- stringr::str_replace_all(MIData$MISEV, "3 OF 5", "3") + MIData$MISEV <- stringr::str_replace_all(MIData$MISEV, "MODERATE", "3") + MIData$MISEV <- stringr::str_replace_all(MIData$MISEV, "4 OF 5", "4") + MIData$MISEV <- stringr::str_replace_all(MIData$MISEV, "MARKED", "4") + MIData$MISEV <- stringr::str_replace_all(MIData$MISEV, "5 OF 5", "5") + MIData$MISEV <- stringr::str_replace_all(MIData$MISEV, "SEVERE", "5") + MIData$MISEV <- ordered(MIData$MISEV, levels= c("0","1", "2", "3", "4","5")) + MIData$MISEV = MIData$MISEV %>% tidyr::replace_na("0") + + #Compile OM Data for Organlist + #Find Brain indexes + OrganWeights <- data.frame(USUBJID = NA,OMSPEC = NA,OMSTRESN = NA, OMTEST = NA) + for (nj in 1:numstudies){ + Name <- paste0('SENDStudy',as.character(nj)) + #Pull idx of the brain and desired organs + Studyidx <- stringr::str_which(get(Name)$om$OMSPEC, "BRAIN") + for (i in 1:length(Organ)){ + Studyidx <- append(Studyidx, stringr::str_which(get(Name)$om$OMSPEC, Organ[i])) + } + #Pull relevant OM Data + OMD <- get(Name)$om[Studyidx,c("USUBJID", "OMSPEC", "OMSTRESN","OMTEST")] + #Add to CompileData + OrganWeights <- rbind(OrganWeights, OMD) + } + OrganWeights <- na.omit(OrganWeights) + ## } + OrganWeights <- OrganWeights[which(OrganWeights$OMTEST == "Weight"), c("USUBJID", "OMSPEC", "OMSTRESN")] + CompileData <- merge(CompileData, OrganWeights, by = "USUBJID", all.x = T) + CompileData <- CompileData[which(is.na(CompileData$OMSPEC) == FALSE),] + + #Combine Levels on Findings + MIData$MISTRESC <- as.factor(MIData$MISTRESC) + levels(MIData$MISTRESC)[levels(MIData$MISTRESC) == "CELL DEBRIS"] <- "CELLULAR DEBRIS" + levels(MIData$MISTRESC)[levels(MIData$MISTRESC) == "Infiltration, mixed cell"] <- "Infiltrate" + levels(MIData$MISTRESC)[levels(MIData$MISTRESC) == "Infiltration, mononuclear cell"] <- "Infiltrate" + levels(MIData$MISTRESC)[levels(MIData$MISTRESC) == "Fibrosis"] <- "Fibroplasia/Fibrosis" + ######### OM Graph ############### + + #Calculate Organ to Terminal BW Ratio + CompileData$OrgantoTermBW <- CompileData$OMSTRESN/CompileData$BWSTRESN + #Calculate Organ to Brain Weight Ratio + CompileData$OrgantoBrainOW <- NA + for (sub in unique(CompileData$USUBJID)){ + SubjectData <- CompileData[which(CompileData$USUBJID == sub),] + Subidx <-which(CompileData$USUBJID == sub) + SubBrainWeight <- SubjectData$OMSTRESN[which(SubjectData$OMSPEC == "BRAIN")] + CompileData$OrgantoBrainOW[Subidx] <- CompileData$OMSTRESN[Subidx]/SubBrainWeight + } + ## browser() + #Calculate zScore + CompileData$OrganzScore <- NA + CompileData$BWRatiozScore <- NA + CompileData$BrainRatiozScore <- NA + for (sex in c('M','F')) { + ## Restrict Gender of compile data based on sex + GenderData <- CompileData[which(CompileData$SEX == sex),] + #Calculate Z Score for straight Organ Weight, Terminal BW Ratio, and Brain Ratio + for (study in unique(CompileData$StudyID)){ + StudyData <- GenderData[which(GenderData$StudyID == study),] + StudyIdx <- which(CompileData$StudyID == study) + StudyIdx <- intersect(StudyIdx, which(CompileData$SEX == sex)) + #Find Control Animals Per Study and Calculate Mean and SD per Organ + ControlAnimals <- StudyData[which(StudyData$ARMCD == "Vehicle"),] + for (organ in unique(StudyData$OMSPEC)){ + organdata <- ControlAnimals[which(ControlAnimals$OMSPEC == organ),] + MeansSd <- data.frame(ORGAN = organ, + ORGANMEAN = mean(organdata$OMSTRESN, na.rm = TRUE), + ORGANSd = sd(organdata$OMSTRESN, na.rm = TRUE), + OrgantoBWmean = mean(organdata$OrgantoTermBW, na.rm = TRUE), + OrgantoBWSd = sd(organdata$OrgantoTermBW, na.rm = TRUE), + OrgantoBrainmean = mean(organdata$OrgantoBrainOW, na.rm = TRUE), + OrgantoBrainSd = sd(organdata$OrgantoBrainOW, na.rm = TRUE)) + Idx<- which(StudyData$OMSPEC == organ) + StudyData$OrganzScore[Idx] <-(StudyData$OMSTRESN[Idx] - MeansSd$ORGANMEAN)/MeansSd$ORGANSd + StudyData$BWRatiozScore[Idx] <-(StudyData$OrgantoTermBW[Idx] - MeansSd$OrgantoBWmean)/MeansSd$OrgantoBWSd + StudyData$BrainRatiozScore[Idx] <-(StudyData$OrgantoBrainOW[Idx] -MeansSd$OrgantoBrainmean)/MeansSd$OrgantoBrainSd + } + #Reconcile Study into CompileData with Zscores + CompileData$OrganzScore[StudyIdx] <- StudyData$OrganzScore + CompileData$BWRatiozScore[StudyIdx] <- StudyData$BWRatiozScore + CompileData$BrainRatiozScore[StudyIdx] <- StudyData$BrainRatiozScore + } + } + + #GRAPH OM ZScore + OMGraphData <- CompileData[,c("USUBJID","StudyID","ARMCD","Species","SEX","OMSPEC","BrainRatiozScore", + "BWRatiozScore", "OrganzScore")] + OMGraphData$Compound <- word(OMGraphData$StudyID, 2) + + #Remove Brain and limit to Dose Chosen + OMGraphData <- OMGraphData[which(OMGraphData$OMSPEC %in% Organ),] + OMresults[[Group]][[Gender]] <-OMGraphData + + ###### LB GRAPHS ####################################################### + + if (nrow(LBData) == 0){ + #Removes empty LBData from zScore Calcuation as it cannot calculate + } else { + #Calculate Z Score per LBTESTCD + LBData <- merge(LBData, unique(AllData[,c("USUBJID", "ARMCD","StudyID","SEX")]), by = "USUBJID") + #Recode Arms for LBData + LBData$ARMCD <- as.factor(LBData$ARMCD) + # Find Levels of Study + ARMS <- levels(LBData$ARMCD) + ARMS <- gsub("R","",ARMS) + levels(LBData$ARMCD) <- ARMS #Remove leading 0s + levels(LBData$ARMCD)[levels(LBData$ARMCD) == "01"] <- "1" + levels(LBData$ARMCD)[levels(LBData$ARMCD) == "02"] <- "2" + levels(LBData$ARMCD)[levels(LBData$ARMCD) == "03"] <- "3" + levels(LBData$ARMCD)[levels(LBData$ARMCD) == "04"] <- "4" + ## } + levels(LBData$ARMCD) <- doseRanks + if (length(LBData$LBTESTCD) == 0){ + } else { + LBData$zscore <- NA + for (sex in c('M','F')) { + ## Restrict Gender of compile data based on sex + GenderData <- LBData[which(LBData$SEX == sex),] + for (study in unique(LBData$StudyID)){ + StudyData <- GenderData[which(GenderData$StudyID == study),] + for (TEST in unique(StudyData$LBTESTCD)){ + TESTData <- StudyData[which(StudyData$LBTESTCD == TEST),] + ControlTESTData <- TESTData[which(TESTData$ARMCD == "Vehicle"),] + SIdx <- which(LBData$StudyID == study) + SIdx <- intersect(SIdx, which(LBData$SEX == sex)) + index <- intersect(which(LBData$LBTESTCD == TEST),SIdx) + LB.mean.C <- mean(ControlTESTData$LBSTRESN, na.rm = TRUE) + LB.sd.C <- sd(ControlTESTData$LBSTRESN, na.rm = TRUE) + if (is.na(LB.sd.C) == TRUE){ + #print(paste0(TEST, "For ", study, sex)) + } + LBData$zscore[index] <- (LBData$LBSTRESN[index]- LB.mean.C)/LB.sd.C + } + } + } + } + #Remove Recovery Animals from LBData + LBData2 <- LBData[which(LBData$USUBJID %in% CompileData$USUBJID),] + if (length(LBData2$LBTESTCD) == 0){ + + } else{ + CompileData <- merge(CompileData, LBData2[,c("USUBJID","zscore","LBTESTCD")], by = "USUBJID") + CompileData <- reshape2::dcast(CompileData, USUBJID+StudyID+Species+SEX+ARMCD+OMSPEC+BrainRatiozScore+BWSTRESN+BWzScore~LBTESTCD, value.var = "zscore", fun.aggregate = mean) + } + } + + #Save Respective LBData per OrganSystem and Gender + LBresults[[Group]][[Gender]] <- LBData + + ########## MI Data ############### + + #Merge Severity MI Data into Compile Data + ## print('MIDATA') + ## print(str(MIData)) + MIIncidencePRIME <-MIData[,c(1,2,4)] + + ## print('MIIncidencePRIME') + ## print(head(MIIncidencePRIME)) + Severity <- merge(MIData, CompileData[,c("USUBJID", "StudyID", "Species", "ARMCD")]) + MIData <- reshape2::dcast(MIData, USUBJID ~ MISTRESC, value.var = "MISEV") + MIData[is.na(MIData)] <- "0" #Fill NAs with Zero + CompileData<- merge(CompileData, MIData, by = "USUBJID") + print('compile data') + print(str(CompileData)) + + # Remove Normal MI Results + normalIndex <- which(colnames(CompileData) == 'NORMAL') + if (length(normalIndex) > 0) { + CompileData <- CompileData[, -normalIndex] + } + + #Calculate Incidence per group for MI Data + MIIncidencePRIME <- merge(MIIncidencePRIME, unique(CompileData[,c("USUBJID", "StudyID","ARMCD")]), by = "USUBJID") + groups <- paste0(MIIncidencePRIME$StudyID," ", MIIncidencePRIME$ARMCD) + #HAVE IT THROUGH ORGANS HERE + for (MISPEC in unique(MIIncidencePRIME$MISPEC) ){ + MIIncidence <- MIIncidencePRIME[which(MIIncidencePRIME$MISPEC %in% MISPEC),c("USUBJID","MISTRESC", "StudyID","ARMCD")] + + GroupIncid <- data.frame(Treatment = NA, + Sex = NA, + Finding = NA, + Count = NA) + print('GroupIncid') + print(str(GroupIncid)) + GroupIncid2 <- GroupIncid + for (Study in unique(MIIncidence$StudyID)){ + for (sex in c('M','F')) { + StudyMI <- MIIncidence[which(MIIncidence$StudyID==Study),] + StudyGroupIncid <- data.frame(Treatment = NA, + Sex = NA, + Finding = NA, + Count = NA) + StudyNonBaselineIncid <- StudyGroupIncid + sexSubjects <- CompileData$USUBJID[which(CompileData$SEX == sex)] + sexIndex <- which(StudyMI$USUBJID %in% sexSubjects) + StudyMI <- StudyMI[sexIndex,] + print('StudyMI') + print(str(StudyMI)) + for(dose in unique(StudyMI$ARMCD)){ + doseMI <- StudyMI[which(StudyMI$ARMCD == dose),] + print('doseMI') + print(str(doseMI)) + + + Incid <- data.frame(table(toupper(doseMI$MISTRESC))/length(unique(doseMI$USUBJID))) + names(Incid)[2] <- "Count" + names(Incid)[1] <- "Finding" + Incid$Treatment <- paste0(Study, " ",dose) + Incid$Sex <- sex + + StudyGroupIncid <- rbind(StudyGroupIncid,Incid) + StudyNonBaselineIncid <- rbind(StudyNonBaselineIncid, Incid) + } + #Removing of Vehicle Baseline + for (finding in unique(StudyGroupIncid$Finding)) { + findingIndex <- which(StudyGroupIncid$Finding == finding) + vehicleIndex <- grep('Vehicle', StudyGroupIncid$Treatment[findingIndex]) + if (length(vehicleIndex) > 0) { + baseline <- StudyGroupIncid$Count[findingIndex][vehicleIndex] + StudyGroupIncid$Count[findingIndex] <- StudyGroupIncid$Count[findingIndex] - baseline + } + } + negativeIndex <- which(StudyGroupIncid$Count < 0) + if (length(negativeIndex) > 0) { + StudyGroupIncid$Count[negativeIndex] <- 0 + } + + GroupIncid <- rbind(GroupIncid, StudyGroupIncid) + GroupIncid2 <- rbind(GroupIncid2, StudyNonBaselineIncid) #Non-Baseline Removed for graph + } + } + removeIndex <- which(is.na(GroupIncid$Treatment)) + removeIndex2 <- which(is.na(GroupIncid2$Treatment)) + if (length(removeIndex) > 0) { + GroupIncid <- GroupIncid[-removeIndex,] + GroupIncid2 <- GroupIncid2[-removeIndex2,] + } + MIIncidence <- GroupIncid + MIIncidence2 <- GroupIncid2 + #Make MIplotData by Merging MI Incidence with Severity + Severity$Treatment <- paste0(Severity$StudyID," ", Severity$ARMCD) + names(Severity)[2] <- "Finding" + MIplotData <- merge(MIIncidence2,Severity[,c("Treatment","MISEV","Finding")], by = c("Treatment","Finding")) + MIplotData <- aggregate(MISEV ~Treatment+Finding+Sex+Count,FUN = max, data = MIplotData) + #Reconcile names for Heatmap + rep_str <- c("NORMAL" = "UNREMARKABLE", "INFILTRATION, MIXED CELL"= "INFILTRATE", + "INFILTRATION, MONONUCLEAR CELL" = "INFILTRATE") + MIplotData$Finding <- stringr::str_replace_all(MIplotData$Finding, rep_str) + #Filter for Parameters + MIplotData$Dose <- word(MIplotData$Treatment,-1) + + #SAVE MIplotData Per Gender and Dose AND ORGAN + MIresults[[Group]][[Gender]][[MISPEC]]<- MIplotData + } + CompileDataSummary[[Gender]] <- CompileData + ####################################### Scoring Portion ######################### + + ScoredData <- CompileData[,1:6] # On Local COmpile data is empty here D: + ScoredData$BWzScore <- abs(CompileData$BWzScore) + for (Study in unique(ScoredData$StudyID)){ + ScoredData[ScoredData$StudyID == Study,] %<>% + dplyr::mutate(BWzScore = case_when(BWzScore > 3 ~ 3 + ,BWzScore >= 2 ~ 2 + ,BWzScore >= 1 ~ 1 + ,TRUE ~ 0 + )) + + } + + #Score the OM Domain Brain Ratios + ScoredData$OMBrainRatio <- abs(CompileData$BrainRatiozScore) + for (Study in unique(ScoredData$StudyID)){ + ScoredData[ScoredData$StudyID == Study,] %<>% + dplyr::mutate(OMBrainRatio = case_when(OMBrainRatio > 3 ~ 3 + ,OMBrainRatio >= 2 ~ 2 + ,OMBrainRatio >= 1~ 1 + ,TRUE ~ 0 + )) + } + + #Score LB Data + colIndex <- which(colnames(CompileData) %in% organTESTCDlist[[organSystem]]) + if (identical(integer(0),colIndex) == TRUE){ + ScoredData$OMSPEC <- CompileData$OMSPEC + #Removes Scoring if there are no LB Tests + colIndex <- which(colnames(CompileData) == "BWRatiozScore") + print(paste0("No LB TESTS SELECTED in ", organSystem)) + } else { + for (i in colIndex) { + colName <- colnames(CompileData)[i] + ScoredData[[colName]] <- NA + for (Study in unique(ScoredData$StudyID)){ + j <- which(CompileData$StudyID == Study) + StudyData <- CompileData[which(CompileData$StudyID == Study),] + + x <- ifelse(StudyData[,i]>3 | StudyData[,i]<(-3),3, + ifelse(StudyData[,i]>2 | StudyData[,i]<(-2),2, + ifelse((StudyData[,i]> 1 | StudyData[,i]< (-1)),1,0))) + ScoredData[j,colName] <-x + # colnames(ScoredData)[i] <- colnames(CompileData)[i+1] + } + } + } + IncidenceOverideCount <- 0 + #Score MI Data + ## print('colIndex') + ## print(colIndex) + ## print(str(CompileData)) + colIndex <- seq((colIndex[length(colIndex)]+1), ncol(CompileData)) + for (i in colIndex){ + colName <- colnames(CompileData)[i] + ScoredData[[colName]] <- NA + #Score Severity + x <- ifelse(CompileData[,i]>3,3, + ifelse(CompileData[,i]==3,2, + ifelse(CompileData[,i]>0,1,0))) + ScoredData[,colName] <-x + #Check the Incidence percentage for each group + for (Study in unique(ScoredData$StudyID)){ + for (sex in c('M','F')) { + studyDataStudyIndex <- which(CompileData$StudyID == Study) + studyDataSexIndex <- which(CompileData$SEX == sex) + studyDataIndex <- intersect(studyDataStudyIndex, studyDataSexIndex) + StudyData <- CompileData[studyDataIndex,] + + MIIncidStudyIndex <- grep(Study, MIIncidence$Treatment) + MIIncidSexIndex <- which(MIIncidence$Sex == sex) + MIIncidIndex <- intersect(MIIncidStudyIndex, MIIncidSexIndex) + MIIncidStudy <- MIIncidence[MIIncidIndex,] + + for (Dose2 in unique(StudyData$ARMCD)){ + DoseSevIndex <- which(StudyData$ARMCD == Dose2) + DoseSev <- StudyData[DoseSevIndex,] + DoseIncid <- MIIncidStudy[which(word(MIIncidStudy$Treatment, -1) == Dose2),] + if (colName %in% DoseIncid$Finding) { + findingIndex <- which(DoseIncid$Finding == colName) + Incid <- DoseIncid$Count[findingIndex] + Incid <- ifelse(Incid>=0.5,3, + ifelse(Incid>=0.25,2, + ifelse(Incid>=0.1,1,0))) + swapIndex <- which(DoseSev[[colName]] < Incid & DoseSev[[colName]] > 0) + if (length(swapIndex) > 0) { + DoseSev[swapIndex, colName] <- Incid + ScoredData[studyDataIndex[DoseSevIndex], colName] <- DoseSev[, colName] + IncidenceOverideCount <- IncidenceOverideCount + 1 + } + + } + } + } + } + } + + #Check if there is more than just OMSPEC of Brain per Study ID + Rmxidx <- list() + for (Study in unique(ScoredData$StudyID)){ + idx <- which(ScoredData$StudyID %in% Study) + Data <- ScoredData[idx,] + Val <- unique(Data$OMSPEC) + if (length(Val) == 1){ + + } else { + #Add Rows with "BRAIN" to the remove list + idx2 <- which(ScoredData$StudyID %in% Study & ScoredData$OMSPEC == "BRAIN") + Rmxidx <-append(Rmxidx, idx2) + } + } + Rmxidx <- unlist(Rmxidx) + ScoredData <- ScoredData[-Rmxidx,] + CompileData <- CompileData[-Rmxidx,] + + # #Return MI DOMAIN to Initial Terminology if needed to be changed for groupings + if (Group == 'HEMATOPOIETIC'){ + MIDOMAIN <- 'HEMATOPOIETIC' + } else if (Group == 'ENDOCRINE'){ + MIDOMAIN <- 'ENDOCRINE' + } else if (Group == 'REPRODUCTIVE'){ + MIDOMAIN <- 'REPRODUCTIVE' + } + + summaryResults[[organSystem]]$BW <- NULL + summaryResults[[organSystem]]$OM <- NULL + summaryResults[[organSystem]]$LB$SERUM <- NULL + summaryResults[[organSystem]][['LB']][['WHOLE BLOOD']] <- NULL + summaryResults[[organSystem]]$LB$URINE <- NULL + summaryResults[[organSystem]]$MI <- NULL + + organEndPoints <- c('Organ Weights', 'Clinical Pathology', 'Histopathology', 'Body Weights') + for (sex in Gender) { + for (Study in unique(ScoredData$StudyID)) { + ScoredDataTmp <- ScoredData[which(ScoredData$StudyID == Study & ScoredData$SEX == sex & ScoredData$ARMCD == Dose),] + for (organEndPoint in organEndPoints) { + if (organEndPoint == 'Body Weights') { + BWtmp <- mean(ScoredDataTmp$BWzScore, na.rm = T) + summaryResults[[organSystem]]$BW <- c(summaryResults[[organSystem]]$BW, BWtmp) + } else if (organEndPoint == 'Organ Weights') { + OMtmp <- mean(ScoredDataTmp$OMBrainRatio, na.rm = T) + summaryResults[[organSystem]]$OM <- c(summaryResults[[organSystem]]$OM, OMtmp) + } else if (organEndPoint == 'Clinical Pathology') { + for (endpoint in c('SERUM', 'WHOLE BLOOD', 'URINE')) { + endpointIndex <- grep(endpoint, colnames(ScoredDataTmp)) + if (length(endpointIndex) > 0) { + if (aggregationMethod == 'mean') { + maxEndpointData <- apply(ScoredDataTmp[,endpointIndex], MARGIN=1, FUN=mean, na.rm = T) + } else if (aggregationMethod == 'animalMax') { + maxEndpointData <- apply(ScoredDataTmp[,endpointIndex], MARGIN=1, FUN=max, na.rm = T) + } else if (aggregationMethod == 'endpointMax') { + maxEndpointData <- apply(ScoredDataTmp[,endpointIndex], MARGIN=2, FUN=max, na.rm = T) + } + infIndex <- which(is.infinite(maxEndpointData)) + if (length(infIndex) > 0) { + maxEndpointData[infIndex] <- NA + } + meanEndpointValue <- mean(maxEndpointData, na.rm = T) + summaryResults[[organSystem]][['LB']][[endpoint]] <- c(summaryResults[[organSystem]][['LB']][[endpoint]], + meanEndpointValue) + } + } + } else if (organEndPoint == 'Histopathology') { + preMIindex <- grep('|', colnames(ScoredDataTmp), fixed = T) + if (nrow(LBData) == 0) { + preMIindex <- which(colnames(ScoredDataTmp) == "OMSPEC") #account for loss of LB Variables + } + ScoredDataTmp2 <- ScoredDataTmp[which(ScoredDataTmp$OMSPEC %in% MITESTCDlist[[organSystem]]),] + MIindex <- seq((max(preMIindex)+1), ncol(ScoredDataTmp)) + if (aggregationMethod == 'mean') { + if (length(MIindex) ==1){ + maxEndpointData <- mean(ScoredDataTmp2[,MIindex], na.rm = T) + } else { + maxEndpointData <- apply(ScoredDataTmp2[,MIindex], MARGIN=1, FUN=mean, na.rm = T) + } + } else if (aggregationMethod == 'animalMax') { + if (length(MIindex) ==1){ + maxEndpointData <- max(ScoredDataTmp2[,MIindex], na.rm = T) + } else { + maxEndpointData <- apply(ScoredDataTmp2[,MIindex], MARGIN=1, FUN=max, na.rm = T) + } + } else if (aggregationMethod == 'endpointMax') { + if (length(MIindex) == 1){ + maxEndpointData <- max(ScoredDataTmp2[,MIindex], na.rm = T) + } else { + maxEndpointData <- apply(ScoredDataTmp2[,MIindex], MARGIN=2, FUN=max, na.rm = T) + } + } + if (identical(maxEndpointData, integer(0)) == TRUE){ #Error Catch for missing values in studies + maxEndpointData <- 0 + } + meanEndpointValue <- mean(as.numeric(maxEndpointData)) + summaryResults[[organSystem]]$MI <- c(summaryResults[[organSystem]]$MI, meanEndpointValue) + } + } + } + } + #Clear for Reset + CompileData <- CompileDataPrime + } + Results <- as.data.frame(summaryResults) + # Generate list of names from order loaded + StudyNames <- list() + for (nj in 1:numstudies){ + Name <- paste0('SENDStudy',as.character(nj)) + #Pull all of the relevant DM Data + Species <- get(Name)$ts$TSVAL[which(get(Name)$ts$TSPARMCD == "SPECIES")] + TRTName <- get(Name)$ts$TSVAL[which(get(Name)$ts$TSPARMCD == "TRT")] + StudyID <- paste0(Species, " ", TRTName, " ", Gender) + #Store Study ID + StudyNames <- append(StudyNames, StudyID) + } + #replace Results rownames with generated StudyIDs + rownames(Results) <- StudyNames + ## } + summaryData <- rbind(summaryData,Results) + } + summaryData <- cbind(summaryData, setNames( lapply(c(organSystems, 'BW'), function(x) x= NA),c(organSystems, 'BW') )) + + for (organSystem in c(organSystems, 'BW')) { + Tmp <- rowMeans(summaryData[,grep(organSystem, colnames(summaryData))], na.rm = TRUE) + # assign(organSystem, Tmp) + summaryData[,organSystem] <- Tmp + } + summaryData <- t(summaryData) + #Rename 'BW' as 'Body Weight' and add 'LB' to single LB source names to include LB + rownames(summaryData)[which(rownames(summaryData) =="BW")] <- "BODY WEIGHT" + rownames(summaryData)[which(rownames(summaryData) =="LIVER.SERUM")] <- "LIVER.LB.SERUM" + rownames(summaryData)[which(rownames(summaryData) =="ENDOCRINE.SERUM")] <- "ENDOCRINE.LB.SERUM" + rownames(summaryData)[which(rownames(summaryData) =="HEMATOPOIETIC.WHOLE.BLOOD")] <- "HEMATOPOIETIC.LB.WHOLE.BLOOD" + + print('DONE') + showNotification("Analysis is Done", type = "message") + + #Re-Render Plots that Need Data Changes + output$FWplot <- renderPlot({ + if (length(SEX) == 2){ + FWPM <-makeFWplot(FWDataSummary$M, input$FWTime, input$dose, 'M') + FWPF <- makeFWplot(FWDataSummary$F, input$FWTime, input$dose,'F') + print(plot(cowplot::plot_grid(FWPM,FWPF, nrow = 1,ncol = 2))) + } else { + FWP <- makeFWplot(FWData, input$FWTime,input$dose,SEX) + print(FWP) + } + }) + + output$BWplot <- renderPlot({ + if (length(SEX) == 2){ + q <- makeBWplot(BodyWeightSummary$M,input$bwMethod,input$bwMetric,input$dose,'M') + t <- makeBWplot(BodyWeightSummary$F,input$bwMethod,input$bwMetric,input$dose,'F') + print(cowplot::ggdraw(cowplot::plot_grid(q,t))) + } else { + q <- makeBWplot(BodyWeight,input$bwMethod,input$bwMetric,input$dose,SEX) + print(q) + } + }) + ## OM Plots ## + + output$OMplot <- renderPlot({ #Kidney Organ Weights Graph + if (length(SEX) == 2){ + KOM <- makeOMplot(OMresults,'KIDNEY',input$omMethod,input$dose,'M') + KOM2 <- makeOMplot(OMresults,'KIDNEY',input$omMethod,input$dose,'F') + print(cowplot::ggdraw(cowplot::plot_grid(KOM,KOM2))) + } else{ + KOM <- makeOMplot(OMresults,'KIDNEY',input$omMethod,input$dose,SEX) + print(KOM) + } + }) + + output$LOMplot <- renderPlot({ #Liver Organ Weights Graph + if (length(SEX) == 2){ + LOM <- makeOMplot(OMresults,'LIVER',input$omMethod,input$dose,'M') + LOM2 <- makeOMplot(OMresults,'LIVER',input$omMethod,input$dose,'F') + print(cowplot::ggdraw(cowplot::plot_grid(LOM,LOM2))) + } else{ + LOM <- makeOMplot(OMresults,'LIVER',input$omMethod,input$dose,SEX) + print(LOM) + } + }) + + output$HOMplot <- renderPlot({ #Hematopoietic Organ Weights Graph + if (length(SEX) == 2){ + HOM <- makeOMplot(OMresults,'HEMATOPOIETIC',input$omMethod,input$dose,'M') + HOM2 <- makeOMplot(OMresults,'HEMATOPOIETIC',input$omMethod,input$dose,'F') + print(cowplot::ggdraw(cowplot::plot_grid(HOM,HOM2))) + } else{ + HOM <- makeOMplot(OMresults,'HEMATOPOIETIC',input$omMethod,input$dose,SEX) + print(HOM) + } + }) + + output$EOMplot <-renderPlot({ #Endocrine Organ Weights Graph + if (length(SEX) == 2){ + EOM <- makeOMplot(OMresults,'ENDOCRINE',input$omMethod,input$dose,'M') + EOM2 <- makeOMplot(OMresults,'ENDOCRINE',input$omMethod,input$dose,'F') + print(cowplot::ggdraw(cowplot::plot_grid(EOM,EOM2))) + } else{ + EOM <- makeOMplot(OMresults,'ENDOCRINE',input$omMethod,input$dose,SEX) + print(EOM) + } + }) + + output$ROMplot <-renderPlot({ #Reproductive Organ Weights Graph + if (length(SEX) == 2){ + ROM <- makeOMplot(OMresults,'REPRODUCTIVE',input$omMethod,input$dose,'M') + ROM2 <- makeOMplot(OMresults,'REPRODUCTIVE',input$omMethod,input$dose,'F') + print(cowplot::ggdraw(cowplot::plot_grid(ROM,ROM2))) + } else{ + ROM <- makeOMplot(OMresults,'REPRODUCTIVE',input$omMethod,input$dose,SEX) + print(ROM) + } + }) + + ## LB Plots## + output$KSERLBplot <- renderPlot({ #Kidney Clinical Chemistry LB Graph + if (length(SEX) ==2){ + KERB <- makeLBplot(LBresults, 'KIDNEY','SERUM',input$dose,'M') + KERB2 <- makeLBplot(LBresults, 'KIDNEY','SERUM',input$dose,'F') + print(cowplot::ggdraw(cowplot::plot_grid(KERB,KERB2))) + } else { + KERB <- makeLBplot(LBresults, 'KIDNEY','SERUM',input$dose,SEX) + print(KERB) + } + }) + + output$KURILBplot <- renderPlot({ #Kidney Urinalysis LB Graph + if (length(SEX) ==2){ + KURILB <- makeLBplot(LBresults, 'KIDNEY','URINE',input$dose,'M') + KURILB2 <- makeLBplot(LBresults, 'KIDNEY','URINE',input$dose,'F') + print(cowplot::ggdraw(cowplot::plot_grid(KURILB,KURILB2))) + } else { + KURILB <- makeLBplot(LBresults, 'KIDNEY','URINE',input$dose,SEX) + print(KURILB) + } + }) + + + output$LSERLBplot <- renderPlot({ #Liver Clinical Chemistry LB Graph + if (length(SEX) ==2){ + LSERLB <- makeLBplot(LBresults, 'LIVER','SERUM',input$dose,'M') + LSERLB2 <- makeLBplot(LBresults, 'LIVER','SERUM',input$dose,'F') + print(cowplot::ggdraw(cowplot::plot_grid(LSERLB,LSERLB2))) + } else { + LSERLB <- makeLBplot(LBresults, 'LIVER','SERUM',input$dose,SEX) + print(LSERLB) + } + }) + + output$HHEMELBplot <- renderPlot({ #Hematopoietic Hematology LB Graph + if (length(SEX) ==2){ + HHEMELB <- makeLBplot(LBresults, 'HEMATOPOIETIC','WHOLE BLOOD',input$dose,'M') + HHEMELB2 <- makeLBplot(LBresults, 'HEMATOPOIETIC','WHOLE BLOOD',input$dose,'F') + print(cowplot::ggdraw(cowplot::plot_grid(HHEMELB,HHEMELB2))) + } else { + HHEMELB <- makeLBplot(LBresults, 'HEMATOPOIETIC','WHOLE BLOOD',input$dose,SEX) + print(HHEMELB) + } + }) + + output$ESERLBplot <- renderPlot({ #Endocrine Clinical Chemistry LB Graph + if (length(SEX) ==2){ + ESERLB <- makeLBplot(LBresults, 'ENDOCRINE','SERUM',input$dose,'M') + ESERLB2 <- makeLBplot(LBresults, 'ENDOCRINE','SERUM',input$dose,'F') + print(cowplot::ggdraw(cowplot::plot_grid(ESERLB,ESERLB2))) + } else { + ESERLB <- makeLBplot(LBresults, 'ENDOCRINE','SERUM',input$dose,SEX) + print(ESERLB) + } + }) + + ##Radar Plots ## + for (i in 1:length(SEX)) { #Overall Summary Radar + local({ + genders <- SEX[i] + print('genders') + print(genders) + print(summaryData) + output[[paste('SummaryRadar',i)]] <- renderPlot({ + plotData <- makeRadar(summaryData,'ALL',genders) + return(plotData) + },height = 700, width = 1600) + + output[[paste('LRadar',i)]] <- renderPlot({ + plotData <- makeRadar(summaryData,'Liver',genders) + return(plotData) + },height = 700, width = 1600) + output[[paste('KRadar',i)]] <- renderPlot({ + plotData <- makeRadar(summaryData,'Kidney',genders) + return(plotData) + },height = 700, width = 1600) + output[[paste('HRadar',i)]] <- renderPlot({ + plotData <- makeRadar(summaryData,'HEMATOPOIETIC',genders) + return(plotData) + },height = 700, width = 1600) + output[[paste('ERadar',i)]] <- renderPlot({ + plotData <- makeRadar(summaryData,'Endocrine',genders) + return(plotData) + },height = 700, width = 1600) + output[[paste('RRadar',i)]] <- renderPlot({ + plotData <- makeRadar(summaryData,'Reproductive',genders) + return(plotData) + },height = 700, width = 1600) + + }) + } + + +# display Studies ---- + output$display_Studies_ALL <- shiny::renderUI({ + shiny::req(summaryData) + # shiny::req(input$clinDosing) + df <- displayIndic(summaryData, 'ALL') + print(df) + choice <- unique(df$Indicators) + #input$selectData + #input$selectStudy + #shiny::isolate(Data <- getData()) + #studyList <- names(Data[['Nonclinical Information']]) + #studyList <- studyList[-which(studyList=='New Study')] + #studyList <- stringr::str_sort(studyList, numeric = T) + addUIDep(shiny::selectizeInput("displayStudiesALL", + label = "Select and Order Organ Systems to Display:", choices = choice, + selected = choice, + multiple = TRUE, + width = "100%", options = list(plugins = list("drag_drop", "remove_button")) + )) + }) + output$SummaryBar <- renderPlotly({ + #shiny::renderPlot({ + testvar<-input$displayStudiesALL + barData <- makeBarPlot(summaryData, 'ALL', testvar) + barData + ## print(barData) + }) + + + output$display_Studies_Kidney <- shiny::renderUI({ + shiny::req(summaryData) + df <- displayIndic(summaryData, 'Kidney') + print(df) + choice <- unique(df$Indicators) + + addUIDep(shiny::selectizeInput("displayStudiesKidney", + label = "Select and Order Indications to Display:", choices = choice, + selected = choice, + multiple = TRUE, + width = "100%", options = list(plugins = list("drag_drop", "remove_button")) + )) + }) + output$KidneyBar <- renderPlotly({ + testvar<-input$displayStudiesKidney + barData <- makeBarPlot(summaryData, 'Kidney', testvar) + barData + ## print(barData) + }) + + output$display_Studies_Liver <- shiny::renderUI({ + shiny::req(summaryData) + df <- displayIndic(summaryData, 'Liver') + ## print(df) + choice <- unique(df$Indicators) + + addUIDep(shiny::selectizeInput("displayStudiesLiver", + label = "Select and Order Indications to Display:", choices = choice, + selected = choice, + multiple = TRUE, + width = "100%", options = list(plugins = list("drag_drop", "remove_button")) + )) + }) + output$LiverBar <- renderPlotly({ + testvar<-input$displayStudiesLiver + barData <-makeBarPlot(summaryData, 'Liver', testvar) + barData + ## print(barData) + }) + + + output$display_Studies_Hema <- shiny::renderUI({ + shiny::req(summaryData) + df <- displayIndic(summaryData, 'HEMATOPOIETIC') + ## print(df) + choice <- unique(df$Indicators) + + addUIDep(shiny::selectizeInput("displayStudiesHema", + label = "Select and Order Indications to Display:", choices = choice, + selected = choice, + multiple = TRUE, + width = "100%", options = list(plugins = list("drag_drop", "remove_button")) + )) + }) + output$HemaBar <- renderPlotly({ + testvar<-input$displayStudiesHema + barData <-makeBarPlot(summaryData, 'HEMATOPOIETIC', testvar) + barData + ## print(barData) + }) + + + output$display_Studies_Endocrine <- shiny::renderUI({ + shiny::req(summaryData) + df <- displayIndic(summaryData, 'Endocrine') + print(df) + choice <- unique(df$Indicators) + + addUIDep(shiny::selectizeInput("displayStudiesEndocrine", + label = "Select and Order Indications to Display:", choices = choice, + selected = choice, + multiple = TRUE, + width = "100%", options = list(plugins = list("drag_drop", "remove_button")) + )) + }) + output$EndocrineBar <- renderPlotly({ + testvar<-input$displayStudiesEndocrine + barData <-makeBarPlot(summaryData, 'Endocrine',testvar) + barData + ## print(barData) + }) + + + + output$display_Studies_Reproductive <- shiny::renderUI({ + shiny::req(summaryData) + df <- displayIndic(summaryData, 'Reproductive') + ## print(df) + choice <- unique(df$Indicators) + + addUIDep(shiny::selectizeInput("displayStudiesReproductive", + label = "Select and Order Indications to Display:", choices = choice, + selected = choice, + multiple = TRUE, + width = "100%", options = list(plugins = list("drag_drop", "remove_button")) + )) + }) + output$ReproductiveBar <- renderPlotly({ + testvar<-input$displayStudiesReproductive + barData <-makeBarPlot(summaryData, 'Reproductive',testvar) + barData + ## print(barData) + }) + + + + + + ## MI Plots ## + output$KMIplot <- renderPlot({ #KIDNEY MI PLOT + if (length(SEX) == 2){ + KM <- makeMIplot(MIresults,'KIDNEY','KIDNEY',input$dose,'M', + input$KMIClustY, input$KMIClustX) + KM2 <- makeMIplot(MIresults,'KIDNEY','KIDNEY',input$dose,'F', + input$KMIClustY, input$KMIClustX) + print(gridExtra::grid.arrange(KM,KM2)) + } else { + KM <- makeMIplot(MIresults,'KIDNEY','KIDNEY',input$dose,SEX, + input$KMIClustY, input$KMIClustX) + print(KM) + } + }, height = plotHeight$X) + + output$LMIplot <- renderPlot({ #LIVER MI PLOT + if (length(SEX) == 2){ + LM <- makeMIplot(MIresults,'LIVER','LIVER',input$dose,'M', + input$LMIClustY, input$LMIClustX) + LM2 <- makeMIplot(MIresults,'LIVER','LIVER',input$dose,'F', + input$LMIClustY, input$LMIClustX) + print(gridExtra::grid.arrange(LM,LM2)) + } else { + LM <- makeMIplot(MIresults,'LIVER','LIVER',input$dose,SEX, + input$LMIClustY, input$LMIClustX) + print(LM) + } + }, height = plotHeight$X) + + output$HMIplotSpleen <- renderPlot({ #HEMATOPOIETIC SPLEEN MI PLOT + if (length(SEX) == 2){ + if ("SPLEEN" %in% MITESTCDlist$HEMATOPOIETIC){ + HM <- makeMIplot(MIresults,'HEMATOPOIETIC',"SPLEEN",input$dose,'M', + input$HMIClustY, input$HMIClustX) + HM2 <- makeMIplot(MIresults,'HEMATOPOIETIC',"SPLEEN",input$dose,'F', + input$HMIClustY, input$HMIClustX) + print(gridExtra::grid.arrange(HM,HM2)) + } + } else { + if ("SPLEEN" %in% MITESTCDlist$HEMATOPOIETIC){ + HMS <- makeMIplot(MIresults,'HEMATOPOIETIC',"SPLEEN",input$dose,SEX, + input$HMIClustY, input$HMIClustX) + print(HMS) + } + } + },height = plotHeight$X) + + output$HMIplotBM <- renderPlot({ #HEMATOPOIETIC BONE MARROW MI PLOT + if (length(SEX) == 2){ + if ("BONE MARROW" %in% MITESTCDlist$HEMATOPOIETIC){ + HM <- makeMIplot(MIresults,'HEMATOPOIETIC',"BONE MARROW",input$dose,'M', + input$HMIClustY, input$HMIClustX) + HM2 <- makeMIplot(MIresults,'HEMATOPOIETIC',"BONE MARROW",input$dose,'F', + input$HMIClustY, input$HMIClustX) + print(gridExtra::grid.arrange(HM,HM2)) + } + } else { + if ("BONE MARROW" %in% MITESTCDlist$HEMATOPOIETIC){ + HMB <- makeMIplot(MIresults,'HEMATOPOIETIC',"BONE MARROW",input$dose,SEX, + input$HMIClustY, input$HMIClustX) + print(HMB) + } + } + },height = plotHeight$X) + + output$HMIplotThymus <- renderPlot({ #HEMATOPOIETIC THYMUS MI PLOT + if (length(SEX) == 2){ + if ("THYMUS" %in% MITESTCDlist$HEMATOPOIETIC){ + HM <- makeMIplot(MIresults,'HEMATOPOIETIC',"THYMUS",input$dose,'M', + input$HMIClustY, input$HMIClustX) + HM2 <- makeMIplot(MIresults,'HEMATOPOIETIC',"THYMUS",input$dose,'F', + input$HMIClustY, input$HMIClustX) + print(gridExtra::grid.arrange(HM,HM2)) + } + } else { + if ("THYMUS" %in% MITESTCDlist$HEMATOPOIETIC){ + HMT <- makeMIplot(MIresults,'HEMATOPOIETIC',"THYMUS",input$dose,SEX, + input$HMIClustY, input$HMIClustX) + print(HMT) + } + } + },height = plotHeight$X) + + output$HMIplotLympMand <- renderPlot({ #HEMATOPOIETIC LYMPH NODE, MANDIBULAR MI PLOT + if (length(SEX) == 2){ + if ("LYMPH NODE, MANDIBULAR" %in% MITESTCDlist$HEMATOPOIETIC){ + HM <- makeMIplot(MIresults,'HEMATOPOIETIC',"LYMPH NODE, MANDIBULAR",input$dose,'M', + input$HMIClustY, input$HMIClustX) + HM2 <- makeMIplot(MIresults,'HEMATOPOIETIC',"LYMPH NODE, MANDIBULAR",input$dose,'F', + input$HMIClustY, input$HMIClustX) + print(gridExtra::grid.arrange(HM,HM2)) + } + } else { + if ("LYMPH NODE, MANDIBULAR" %in% MITESTCDlist$HEMATOPOIETIC){ + HMT <- makeMIplot(MIresults,'HEMATOPOIETIC',"LYMPH NODE, MANDIBULAR",input$dose,SEX, + input$HMIClustY, input$HMIClustX) + print(HMT) + } + } + },height = plotHeight$X) + output$HMIplotLympMESEN <- renderPlot({ #HEMATOPOIETIC LYMPH NODE, MESENTERIC MI PLOT + if (length(SEX) == 2){ + if ("LYMPH NODE, MESENTERIC" %in% MITESTCDlist$HEMATOPOIETIC){ + HM <- makeMIplot(MIresults,'HEMATOPOIETIC',"LYMPH NODE, MESENTERIC",input$dose,'M', + input$HMIClustY, input$HMIClustX) + HM2 <- makeMIplot(MIresults,'HEMATOPOIETIC',"LYMPH NODE, MESENTERIC",input$dose,'F', + input$HMIClustY, input$HMIClustX) + print(gridExtra::grid.arrange(HM,HM2)) + } + } else { + if ("LYMPH NODE, MESENTERIC" %in% MITESTCDlist$HEMATOPOIETIC){ + HMT <- makeMIplot(MIresults,'HEMATOPOIETIC',"LYMPH NODE, MESENTERIC",input$dose,SEX, + input$HMIClustY, input$HMIClustX) + print(HMT) + } + } + },height = plotHeight$X) + + output$EMIplot <- renderPlot({ #ENDOCRINE GLAND, ADRENAL MI PLOT + if (length(SEX) == 2){ + if ("GLAND, ADRENAL" %in% MITESTCDlist$ENDOCRINE){ + EM <- makeMIplot(MIresults,'ENDOCRINE', "GLAND, ADRENAL",input$dose,'M', + input$EMIClustY, input$EMIClustX) + EM2 <- makeMIplot(MIresults,'ENDOCRINE', "GLAND, ADRENAL",input$dose,'F', + input$EMIClustY, input$EMIClustX) + print(gridExtra::grid.arrange(EM,EM2)) + } + } else { + if ("GLAND, ADRENAL" %in% MITESTCDlist$ENDOCRINE){ + EM <- makeMIplot(MIresults,'ENDOCRINE', "GLAND, ADRENAL",input$dose,SEX, + input$EMIClustY, input$EMIClustX) + print(EM) + } + } + },height = plotHeight$X) + + output$EMIplot2 <- renderPlot({ #ENDOCRINE GLAND, PITUITARY MI PLOT + if (length(SEX) == 2){ + if ("GLAND, PITUITARY" %in% MITESTCDlist$ENDOCRINE){ + EM <- makeMIplot(MIresults,'ENDOCRINE', "GLAND, PITUITARY",input$dose,'M', + input$EMIClustY, input$EMIClustX) + EM2 <- makeMIplot(MIresults,'ENDOCRINE', "GLAND, PITUITARY",input$dose,'F', + input$EMIClustY, input$EMIClustX) + print(gridExtra::grid.arrange(EM,EM2)) + } + } else { + if ("GLAND, PITUITARY" %in% MITESTCDlist$ENDOCRINE){ + EM <- makeMIplot(MIresults,'ENDOCRINE', "GLAND, PITUITARY",input$dose,SEX, + input$EMIClustY, input$EMIClustX) + print(EM) + } + } + },height = plotHeight$X) + + output$EMIplot3 <- renderPlot({ #ENDOCRINE GLAND, PARATHYROID MI PLOT + if (length(SEX) == 2){ + if ("GLAND, PARATHYROID" %in% MITESTCDlist$ENDOCRINE){ + EM <- makeMIplot(MIresults,'ENDOCRINE', "GLAND, PARATHYROID",input$dose,'M', + input$EMIClustY, input$EMIClustX) + EM2 <- makeMIplot(MIresults,'ENDOCRINE', "GLAND, PARATHYROID",input$dose,'F', + input$EMIClustY, input$EMIClustX) + print(gridExtra::grid.arrange(EM,EM2)) + } + } else { + if ("GLAND, PARATHYROID" %in% MITESTCDlist$ENDOCRINE){ + EM <- makeMIplot(MIresults,'ENDOCRINE', "GLAND, PARATHYROID",input$dose,SEX, + input$EMIClustY, input$EMIClustX) + print(EM) + } + } + },height = plotHeight$X) + + output$EMIplot4 <- renderPlot({ #ENDOCRINE GLAND, THYROID MI PLOT + if (length(SEX) == 2){ + if ("GLAND, THYROID" %in% MITESTCDlist$ENDOCRINE){ + EM <- makeMIplot(MIresults,'ENDOCRINE', "GLAND, THYROID",input$dose,'M', + input$EMIClustY, input$EMIClustX) + EM2 <- makeMIplot(MIresults,'ENDOCRINE', "GLAND, THYROID",input$dose,'F', + input$EMIClustY, input$EMIClustX) + print(gridExtra::grid.arrange(EM,EM2)) + } + } else { + if ("GLAND, THYROID" %in% MITESTCDlist$ENDOCRINE){ + EM <- makeMIplot(MIresults,'ENDOCRINE', "GLAND, THYROID",input$dose,SEX, + input$EMIClustY, input$EMIClustX) + print(EM) + } + } + },height = plotHeight$X) + + output$EMIplot5 <- renderPlot({ #ENDOCRINE PANCREAS MI PLOT + if (length(SEX) == 2){ + if ("PANCREAS" %in% MITESTCDlist$ENDOCRINE){ + EM <- makeMIplot(MIresults,'ENDOCRINE', "PANCREAS",input$dose,'M', + input$EMIClustY, input$EMIClustX) + EM2 <- makeMIplot(MIresults,'ENDOCRINE', "PANCREAS",input$dose,'F', + input$EMIClustY, input$EMIClustX) + print(gridExtra::grid.arrange(EM,EM2)) + } + } else { + if ("PANCREAS" %in% MITESTCDlist$ENDOCRINE){ + EM <- makeMIplot(MIresults,'ENDOCRINE', "PANCREAS",input$dose,SEX, + input$EMIClustY, input$EMIClustX) + print(EM) + } + } + },height = plotHeight$X) + + #MI Plots for Reproductive set by SEX they occur in + output$RMIplot <- renderPlot({ #REPRODUCTIVE GLAND, PROSTATE MI PLOT + if ("GLAND, PROSTATE" %in% MITESTCDlist$REPRODUCTIVE){ + RM <- makeMIplot(MIresults,'REPRODUCTIVE',"GLAND, PROSTATE",input$dose,'M', + input$RMIClustY, input$RMIClustX) + print(RM) + } + },height = 350) + + output$RMIplot2 <- renderPlot({ #REPRODUCTIVE EPIDIDYMIS MI PLOT + if ("EPIDIDYMIS" %in% MITESTCDlist$REPRODUCTIVE){ + RM <- makeMIplot(MIresults,'REPRODUCTIVE',"EPIDIDYMIS",input$dose,'M', + input$RMIClustY, input$RMIClustX) + print(RM) + } + },height = 350) + + output$RMIplot3 <- renderPlot({ #REPRODUCTIVE TESTIS MI PLOT + if ("TESTIS" %in% MITESTCDlist$REPRODUCTIVE){ + RM <- makeMIplot(MIresults,'REPRODUCTIVE',"TESTIS",input$dose,'M', + input$RMIClustY, input$RMIClustX) + print(RM) + } + },height = 350) + + output$RMIplot4 <- renderPlot({ #REPRODUCTIVE UTERUS MI PLOT + if ("UTERUS" %in% MITESTCDlist$REPRODUCTIVE){ + RM <- makeMIplot(MIresults,'REPRODUCTIVE',"UTERUS",input$dose,'F', + input$RMIClustY, input$RMIClustX) + print(RM) + } + },height = 350) + + output$RMIplot5 <- renderPlot({ #REPRODUCTIVE CERVIX MI PLOT + if ("CERVIX" %in% MITESTCDlist$REPRODUCTIVE){ + RM <- makeMIplot(MIresults,'REPRODUCTIVE',"CERVIX",input$dose,'F', + input$RMIClustY, input$RMIClustX) + print(RM) + } + },height = 350) + + output$RMIplot6 <- renderPlot({ #REPRODUCTIVE GLAND, MAMMARY MI PLOT + if ("GLAND, MAMMARY" %in% MITESTCDlist$REPRODUCTIVE){ + RM <- makeMIplot(MIresults,'REPRODUCTIVE',"GLAND, MAMMARY",input$dose,'F', + input$RMIClustY, input$RMIClustX) + print(RM) + } + },height = 350) + + output$RMIplot7 <- renderPlot({ #REPRODUCTIVE VAGINA MI PLOT + if ("VAGINA" %in% MITESTCDlist$REPRODUCTIVE){ + RM <- makeMIplot(MIresults,'REPRODUCTIVE',"VAGINA",input$dose,'F', + input$RMIClustY, input$RMIClustX) + print(RM) + } + },height = 350) + + output$RMIplot8 <- renderPlot({ #REPRODUCTIVE OVARY MI PLOT + if ("OVARY" %in% MITESTCDlist$REPRODUCTIVE){ + RM <- makeMIplot(MIresults,'REPRODUCTIVE',"OVARY",input$dose,'F', + input$RMIClustY, input$RMIClustX) + print(RM) + } + },height = 350) + + output$tree <- shinyTree::renderTree(TreeSelect) + + }}) + + + #Dynamic Sizing of MI and Radar Plots + + ###new addition - barplot### + output$ReactSummaryBar<- renderUI({ + #lapply(paste('SummaryBar',1:numSEX$X),plotOutput) + #shiny::plotOutput("Barplot") + plotlyOutput('SummaryBar') + }) + ###test - selection ### + output$ReactdisplayStudiesALL <- renderUI({ + uiOutput('display_Studies_ALL') + }) + + + output$ReactKidneyBar <- renderUI({ + plotlyOutput('KidneyBar') + }) + output$ReactdisplayStudiesKidney <- renderUI({ + uiOutput('display_Studies_Kidney') + }) + + + + output$ReactLiverBar <- renderUI({ + plotlyOutput('LiverBar') + }) + output$ReactdisplayStudiesLiver <- renderUI({ + uiOutput('display_Studies_Liver') + }) + + + output$ReactHemaBar <- renderUI({ + plotlyOutput('HemaBar') + }) + output$ReactdisplayStudiesHema <- renderUI({ + uiOutput('display_Studies_Hema') + }) + + + + output$ReactEndocrineBar <- renderUI({ + plotlyOutput('EndocrineBar') + }) + output$ReactdisplayStudiesEndocrine <- renderUI({ + uiOutput('display_Studies_Endocrine') + }) + + + output$ReactReproductiveBar <- renderUI({ + plotlyOutput('ReproductiveBar') + }) + output$ReactdisplayStudiesReproductive <- renderUI({ + uiOutput('display_Studies_Reproductive') + }) + + + + output$ReactSummaryRadar <- renderUI({ #Generate one plot per Gender + lapply(paste('SummaryRadar',1:numSEX$X),plotOutput) + }) + output$ReactLiverRadar <- renderUI({ + lapply(paste('LRadar',1:numSEX$X),plotOutput) + }) + output$ReactKidneyRadar <- renderUI({ + lapply(paste('KRadar',1:numSEX$X),plotOutput) + }) + + output$ReactHemaRadar <- renderUI({ + lapply(paste('HRadar',1:numSEX$X),plotOutput) + }) + output$ReactEndoRadar <- renderUI({ + lapply(paste('ERadar',1:numSEX$X),plotOutput) + }) + output$ReactReproRadar <- renderUI({ + lapply(paste('RRadar',1:numSEX$X),plotOutput) + }) + + output$KMIplotreactive <- renderUI({ + plotOutput('KMIplot',height = plotHeight$X) + }) + + output$LMIplotreactive <- renderUI({ + plotOutput('LMIplot', height = plotHeight$X) + }) + + output$HMIplotreactive <- renderUI({ + plotOutput('HMIplotSpleen', height = plotHeight$X) + }) + output$HMIplotreactive2 <- renderUI({ + plotOutput('HMIplotBM', height = plotHeight$X) + }) + output$HMIplotreactive3 <- renderUI({ + plotOutput('HMIplotThymus', height = plotHeight$X) + }) + output$HMIplotreactive4<- renderUI({ + plotOutput('HMIplotLympMand', height = plotHeight$X) + }) + output$HMIplotreactive5<- renderUI({ + plotOutput('HMIplotLympMESEN', height = plotHeight$X) + }) + + output$EMIplotreactive <- renderUI({ + plotOutput('EMIplot', height = plotHeight$X) + }) + + output$EMIplotreactive2 <- renderUI({ + plotOutput('EMIplot2', height = plotHeight$X) + }) + + output$EMIplotreactive3 <- renderUI({ + plotOutput('EMIplot3', height = plotHeight$X) + }) + + output$EMIplotreactive4 <- renderUI({ + plotOutput('EMIplot4', height = plotHeight$X) + }) + + output$EMIplotreactive5 <- renderUI({ + plotOutput('EMIplot5', height = plotHeight$X) + }) + + output$RMIplotreactive <- renderUI({ + plotOutput('RMIplot', height = plotHeight$X) + }) + + output$RMIplotreactive2 <- renderUI({ + plotOutput('RMIplot2', height = plotHeight$X) + }) + + output$RMIplotreactive3 <- renderUI({ + plotOutput('RMIplot3', height = plotHeight$X) + }) + + output$RMIplotreactive4 <- renderUI({ + plotOutput('RMIplot4', height = plotHeight$X) + }) + + output$RMIplotreactive5 <- renderUI({ + plotOutput('RMIplot5', height = plotHeight$X) + }) + + output$RMIplotreactive6 <- renderUI({ + plotOutput('RMIplot6', height = plotHeight$X) + }) + + output$RMIplotreactive7 <- renderUI({ + plotOutput('RMIplot7', height = plotHeight$X) + }) + + output$RMIplotreactive8 <- renderUI({ + plotOutput('RMIplot8', height = plotHeight$X) + }) + + output$tree <- shinyTree::renderTree ({ + organSystemList <- list( + 'Kidney' = list( + 'Laboratory Values(LB)' = list("Clinical Chemistry" = structure(list('SERUM | CREAT'= 'SERUM | CREAT', + 'SERUM | UREAN' = 'SERUM | UREAN', + 'SERUM | ALB' = 'SERUM | ALB', + 'SERUM | CL' = 'SERUM | CL', + 'SERUM | K' = 'SERUM | K', + 'SERUM | PHOS' = 'SERUM | PHOS', + 'SERUM | SODIUM' = 'SERUM | SODIUM'), stselected = TRUE), + 'Urinanlysis' = structure(list('URINE | K'='URINE | K', + 'URINE | SODIUM' = 'URINE | SODIUM', + 'URINE | GLUC' = 'URINE | GLUC', + 'URINE | SPGRAV' = 'URINE | SPGRAV', + 'URINE | VOLUME' = 'URINE | VOLUME', + 'URINE | PROT' = 'URINE | PROT'),stselected = TRUE)), + 'Histopathology(MI)' = structure(list('KIDNEY' = structure('KIDNEY',stselected = TRUE), + 'URETER' = structure('URETER'), + 'URINARY BLADDER' = structure('URINARY BLADDER'), + 'URETHRA' = structure('URETHRA'))), + 'Organ Weight(OM)' = structure(list('KIDNEY' = structure('KIDNEY',stselected = TRUE)))), + 'Liver' = list( + 'Laboratory Values(LB)' = list("Clinical Chemistry" = structure(list('SERUM | ALT'= 'SERUM | ALT', + 'SERUM | AST' = 'SERUM | AST', + 'SERUM | ALP' = 'SERUM | ALP', + 'SERUM | GGT' = 'SERUM | GGT', + 'SERUM | BILI' = 'SERUM | BILI', + 'SERUM | ALB' = 'SERUM | ALB'), stselected = TRUE)), + 'Histopathology(MI)' = structure(list('LIVER' = structure('LIVER',stselected = TRUE), + 'GALLBLADDER' = structure('GALLBLADDER'))), + 'Organ Weight(OM)' = structure(list('LIVER' = structure('LIVER',stselected = TRUE), + 'GALLBLADDER' = structure('GALLBLADDER'))) + ), + 'Hematopoietic' = list( + 'Laboratory Values(LB)' = list("Hematology" = structure(list('WHOLE BLOOD | RBC'= 'WHOLE BLOOD | RBC', + 'WHOLE BLOOD | HCT' = 'WHOLE BLOOD | HCT', + 'WHOLE BLOOD | MCHC' = 'WHOLE BLOOD | MCHC', + 'WHOLE BLOOD | MCH' = 'WHOLE BLOOD | MCH', + 'WHOLE BLOOD | MCV' = 'WHOLE BLOOD | MCV', + 'WHOLE BLOOD | RDW' = 'WHOLE BLOOD | RDW', + 'WHOLE BLOOD | WBC' = 'WHOLE BLOOD | WBC', + 'WHOLE BLOOD | MONO' = 'WHOLE BLOOD | MONO', + 'WHOLE BLOOD | BASO' = 'WHOLE BLOOD | BASO', + 'WHOLE BLOOD | EOS' = 'WHOLE BLOOD | EOS', + 'WHOLE BLOOD | LYM' = 'WHOLE BLOOD | LYM', + 'WHOLE BLOOD | PLAT' = 'WHOLE BLOOD | PLAT', + 'WHOLE BLOOD | MPV' = 'WHOLE BLOOD | MPV'), stselected = TRUE)), + 'Histopathology(MI)' = structure(list('BONE MARROW' = "BONE MARROW", + 'SPLEEN' = 'SPLEEN', + 'THYMUS' = 'THYMUS', + "LYMPH NODE, MANDIBULAR" = "LYMPH NODE, MANDIBULAR", + "LYMPH NODE, MESENTERIC" = "LYMPH NODE, MESENTERIC"), stselected = TRUE), + 'Organ Weight(OM)' = structure(list('SPLEEN' = 'SPLEEN', + 'THYMUS' = 'THYMUS'), stselected = TRUE) + ), + 'Endocrine' = list( + # 'Laboratory Values(LB)' = list("Clinical Chemistry" = structure(list('SERUM | ALB'= 'SERUM | ALB', + # 'SERUM | CL' = 'SERUM | CL', + # 'SERUM | PHOS' = 'SERUM | PHOS', + # 'SERUM | SODIUM' = 'SERUM | SODIUM', + # 'SERUM | GLUC' = 'SERUM | GLUC', + # 'SERUM | CA' = 'SERUM | CA'), stselected = TRUE)), + 'Histopathology(MI)' = structure(list('GLAND, THYROID' = 'GLAND, THYROID', + 'GLAND, ADRENAL' = 'GLAND, ADRENAL', + 'GLAND, PITUITARY'='GLAND, PITUITARY', + 'GLAND, PARATHYROID'='GLAND, PARATHYROID', + 'PANCREAS'='PANCREAS'), stselected = TRUE), + 'Organ Weight(OM)' = structure(list('GLAND, THYROID' = 'GLAND, THYROID', + 'GLAND, ADRENAL' = 'GLAND, ADRENAL', + 'GLAND, PITUITARY'='GLAND, PITUITARY', + 'GLAND, PARATHYROID'='GLAND, PARATHYROID', + 'PANCREAS'='PANCREAS'), stselected = TRUE) + ), + 'Reproductive' = list( + #Remove LB Values + # 'Laboratory Values(LB)' = list('Hematology' = structure(list('WHOLE BLOOD | RBC'='WHOLE BLOOD | RBC', + # 'WHOLE BLOOD | HGB' = 'WHOLE BLOOD | HGB'),stselected = TRUE)), + 'Histopathology(MI)' = structure(list('GLAND, PROSTATE' = structure('GLAND, PROSTATE',stselected = TRUE), + 'EPIDIDYMIS' = structure('EPIDIDYMIS',stselected = TRUE), + 'TESTIS' = structure('TESTIS',stselected = TRUE), + 'CERVIX' = structure('CERVIX'), + 'GLAND, MAMMARY' = structure('GLAND, MAMMARY'), + 'OVARY' = structure("OVARY"), + 'UTERUS' = structure('UTERUS'), + 'VAGINA' = structure('VAGINA'))), + 'Organ Weight(OM)' = structure(list('GLAND, PROSTATE' = structure('GLAND, PROSTATE',stselected = TRUE), + 'TESTIS' = structure('TESTIS',stselected = TRUE), + 'OVARY' = structure("OVARY"))) + ) + ) + }) + outputOptions(output,"tree", suspendWhenHidden = FALSE) + ## shinyjs::runcodeServer() + +} +shinyApp(ui = ui, server = server) + +} diff --git a/R/Functions.R b/R/Functions.R new file mode 100644 index 0000000..c248d27 --- /dev/null +++ b/R/Functions.R @@ -0,0 +1,302 @@ +#################################################################################### +#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Function Ideas !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +#################################################################################### + + +# > standardize.days (handles Day 1, Hour 24 vs. Day 2, Hour 24) + + +# > fix.LOQ.values (handles values below LOQ) + + +# > check.define.xml (checks define.xml against .xpt files present) + + +# > subset.list (isolate rows from all tables in a list corresponding to subjects with a particular demographic characteristic) +# > subset.table (isolate rows in table corresponding to subjects with a particular demographic characteristic) +# > subset.column (isolate rows in column corresponding to subjects with a particular demographic characteristic) + + +# EXAMPLE: select all data from control animals +# How to deal with multiple treatments (combination product)? +# There is an optional shortcut for this but may not be included in all datasets +# Take general approach: +# (1) in dm.xpt identify SETCD +# (2) in tx.xpt use SETCD to get the Value in TXPARMCD (i.e. TCNTRL) +# +# Or use ex.xpt approach + + + +# EXAMPLE: select all data collected before a particular date +# How to account for cage level linking with subjects? +# Identify nesting structures (nestings may overlap) + +# Is it possible to read xpt files into dataframes without downloading the .xpt file? + +# > write.xpt (write .xpt file from R data frame) + + +# > SEND.to.xls (write an excel file with all .xpt files as different tabs or single files with a description tab) + + +#################################################################################### + + + +#################################################################################### +#!!!!!!!!!!!!!!!!!!!!!!!!!!!! Working Functions !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +#################################################################################### + + +# Function to download all files from a GitHub folder +# NOTE: this function requires the package: "httr" + + +download.GitHub.folder <- function ( + GitHubRepo="phuse-org/phuse-scripts" + , baseDirGitHub="https://github.com/phuse-org/phuse-scripts/raw/master" + , studyDir="data/send/PDS/Xpt") { + req <- GET(paste('https://api.github.com/repos',GitHubRepo,'contents',studyDir,sep='/')) + contents <- content(req,as='parsed') + for (i in seq(length(contents))) { + filePath <- contents[[i]]$path + download.file(paste(baseDirGitHub,filePath,sep='/'),basename(filePath),mode='wb') + } +} + +# Function to list all files from a GitHub folder +# NOTE: this function requires the packages: "httr", "Hmisc" and "tools" +load.GitHub.xpt.files <- function ( + GitHubRepo="phuse-org/phuse-scripts", + baseDirGitHub="https://github.com/phuse-org/phuse-scripts/raw/master", + studyDir="data/send/PDS/Xpt", + domainsOfInterest=NULL,showProgress=F, + authenticate=FALSE,User=NULL,Password=NULL) { + if (authenticate==TRUE) { + req <- GET(paste('https://api.github.com/repos',GitHubRepo,'contents',studyDir,sep='/'), + authenticate(User,Password)) + } else { + req <- GET(paste('https://api.github.com/repos',GitHubRepo,'contents',studyDir,sep='/')) + } + contents <- content(req,as='parsed') + files <- NULL + for (i in seq(length(contents))) { + files[i] <- paste(baseDirGitHub,contents[[i]]$path,sep='/') + } + xptFiles <- files[grep('.xpt',files)] + if (!is.null(domainsOfInterest)) { + groupSENDdomains <- c('dm','ex','tx','pp','ta','se','ds') + domainsOfInterest <- union(groupSENDdomains,domainsOfInterest) + domainsOfInterest <- paste(paste(dirname(xptFiles[1]),'/',domainsOfInterest,'.xpt',sep='')) + xptFiles <- xptFiles[which(tolower(xptFiles) %in% tolower(domainsOfInterest))] + } + dataFrames <- list() + count <- 0 + for (xptFile in xptFiles) { + if (showProgress==T) { + setProgress(value=count/length(xptFiles),message=paste0('Loading ',basename(xptFile),'...')) + } + count <- count + 1 + xptData <- sasxport.get(xptFile) + colnames(xptData) <- toupper(colnames(xptData)) + dataFrames[[count]] <- xptData + } + names(dataFrames) <- tolower(file_path_sans_ext(basename(xptFiles))) + return(dataFrames) +} + +# Function to create a list of R dataframes for each .xpt file +# NOTE: this function requries the packages: "Hmisc" and "tools" +load.xpt.files <- function(path=getwd(),domainsOfInterest=NULL,showProgress=F) { + xptFiles <- Sys.glob(paste(path,"*.xpt",sep='/')) + if (!is.null(domainsOfInterest)) { + domainsOfInterest <- paste(paste(path,'/',domainsOfInterest,'.xpt',sep='')) + xptFiles <- xptFiles[which(tolower(xptFiles) %in% tolower(domainsOfInterest))] + } + dataFrames <- list() + count <- 0 + for (xptFile in xptFiles) { + if (showProgress==T) { + setProgress(value=count/length(xptFiles),message=paste0('Loading ',basename(xptFile),'...')) + } + count <- count + 1 + xptData <- sasxport.get(xptFile) + colnames(xptData) <- toupper(colnames(xptData)) + dataFrames[[count]] <- xptData + } + names(dataFrames) <- tolower(file_path_sans_ext(basename(xptFiles))) + return(dataFrames) +} + +# Function to create a list of R dataframes for each .csv file +load.csv.files <- function(path=getwd(),domainsOfInterest=NULL,showProgress=F) { + # NOTE: this function requries the packages: "tools" + csvFiles <- Sys.glob(paste(path,"*.csv",sep='/')) + if (!is.null(domainsOfInterest)) { + domainsOfInterest <- paste(path,'/',domainsOfInterest,'.csv',sep='') + csvFiles <- csvFiles[which(tolower(csvFiles) %in% tolower(domainsOfInterest))] + } + dataFrames <- list() + count <- 0 + for (csvFile in csvFiles) { + if (showProgress==T) { + setProgress(value=count/length(xptFiles),message=paste0('Loading ',basename(xptFile),'...')) + } + count <- count + 1 + dataFrames[[count]] <- read.csv(csvFile) + } + names(dataFrames) <- tolower(file_path_sans_ext(basename(csvFiles))) + return(dataFrames) +} + + +# Function to extract relevant fields and rename them +subTable <- function(fields,names,rawData) { + count <- 0 + colIndex <- NA + for (field in fields) { + count <- count + 1 + if (length(which(colnames(rawData)==field))==1) { # test to make sure we get each column correctly + index <- which(colnames(rawData)==field) + } else { + stop(paste(field,' Not Present in Dataset!',sep='')) # break and throw error message + } + colIndex[count] <- index + } + Data <- rawData[,colIndex] + colnames(Data) <- names + return(Data) +} + +# Function to read a file from github +# NOTE: this function requries the package: "Hmisc" +read.github.xpt.file <- function ( + fName + , bURL="https://raw.githubusercontent.com/phuse-org/phuse-scripts/master" + , fPath="data/send/PDS/Xpt" + , tDir=getwd() + ) { + # bURL = https://raw.githubusercontent.com/phuse-org/phuse-scripts/master + # fPath = data/send/PDS/Xpt + # fName = a_file_name + # tDir = target/local dir + tFN <- paste(tDir,fName,sep='/') + download.file(paste(bURL,fPath,fName,sep='/'),tFN,mode='wb') + r <- sasxport.get(tFN) + return(r) +} + +# Function to get the value from field based on category in another field (e.g., check a TXVAL given a TXPARMCD and SETCD) +getFieldValue <- function(dataset,queryField,indexFields,indexValues) { + for (i in 1:length(indexFields)) { + indexTmp <- which(dataset[,indexFields[i]]==indexValues[i]) + if (i == 1) { + index <- indexTmp + } else { + index <- intersect(index,indexTmp) + } + } + fieldValue <- dataset[index,queryField] + if (length(levels(dataset[,queryField])) > 0) { + return(levels(dataset[,queryField])[fieldValue]) + } else { + return(fieldValue) + } +} + + +# Function to convert a simple ISO 8601 time duration as described in the SEND IG to seconds +# Returns NA if the fuction cannot convert the string to seconds +# This assumes that a month has 365.2425/12 days and that a year has 365.2425 days (see http://www.convertunits.com/from/second/to/year). +# Other ISO 8601 date times may be handled using https://cran.r-project.org/web/packages/parsedate/parsedate.pdf +# +# DUR_to_seconds("P4S") returns NA because the T is missing after the P +# DUR_to_seconds("-PT4S") returns -4 +# DUR_to_seconds("PT4S") returns 4 +# DUR_to_seconds("P1Y") returns 31557600 +# +#This function requires the library(stringr) +library(stringr) +DUR_to_seconds <- function(input) { + s<-"^(\\+|-)?P((((([0-9]+(\\.[0-9]+)?)Y)?(([0-9]+(\\.[0-9]+)?)M)?(([0-9]+(\\.[0-9]+)?)D)?)(T(([0-9]+(\\.[0-9]+)?)H)?(([0-9]+(\\.[0-9]+)?)M)?(([0-9]+(\\.[0-9]+)?)S)?)?)|([0-9]+(\\.[0-9]+)?)W)$" + result <- str_match(input,s) + if(str_detect(input,s)) + { + # we have a time interval this script can handle + result[is.na(result)] <- 0 # replace NA values with 0 + if(str_detect(input,"^-P")) + { + sign <- (-1) + } else + { + sign <- (1) + } + year<-as.numeric(result[7]) + month<-as.numeric(result[10]) + day<-as.numeric(result[13]) + hour<-as.numeric(result[17]) + minute<-as.numeric(result[20]) + second<-as.numeric(result[23]) + week<-as.numeric(result[25]) + time<-sign*((((year*365.2425+month*(365.2425/12)+7*week+day)*24+hour)*60+minute)*60+second) + return(time) + } else + { + return(NA) + } +} + + +# Create a table with mean and se for a selected numeric field, based on user-defined grouping fields +# and carry over additional "other fields" that have only one value within groups (e.g., STUDYID) +createMeansTable <- function(dataset,meanField,groupFields,otherFields=NULL) { + groups <- list() + for (group in groupFields) { + groups[[group]] <- unique(dataset[,group]) + } + groupsDF <- expand.grid(groups) + + meanData <- NA + sdData <- NA + seData <- NA + nData <- NA + otherFieldList <- list() + for (field in otherFields) { + otherFieldList[[field]] <- rep(NA,nrow(groupsDF)) + } + for (i in seq(nrow(groupsDF))) { + index <- seq(nrow(dataset)) + for (j in seq(ncol(groupsDF))) { + indexTmp <- which(dataset[,colnames(groupsDF)[j]]==groupsDF[i,j]) + index <- intersect(index,indexTmp) + } + meanData[i] <- mean(dataset[index,meanField],na.rm=TRUE) + sdData[i] <- sd(dataset[index,meanField],na.rm=TRUE) + seData[i] <- sd(dataset[index,meanField],na.rm=TRUE)/sqrt(length(which(is.finite(dataset[index,meanField])))) + nData[i] <- length(which(is.na(dataset[index,meanField])==0)) + for (field in otherFields) { + if (length(unique(dataset[index,field]))>1) { + stop('otherField has too many values') + } else if (length(unique(dataset[index,field]))==1) { + if (length(levels(dataset[index,field]))>0) { + otherFieldList[[field]][i] <- levels(dataset[,field])[dataset[index[1],field]] + } else { + otherFieldList[[field]][i] <- unique(dataset[index,field]) + } + } + } + } + newDataset <- cbind(groupsDF,meanData,sdData,seData,nData) + for (field in otherFields) { + newField <- otherFieldList[[field]] + if (length(levels(newField))>0) { + newDataset <- cbind(newDataset,levels(newField)[newField]) + } else { + newDataset <- cbind(newDataset,newField) + } + } + colnames(newDataset) <- c(groupFields,paste(meanField,'mean',sep='_'),paste(meanField,'sd',sep='_'), + paste(meanField,'se',sep='_'),paste(meanField,'n',sep='_'),otherFields) + return(newDataset) +} diff --git a/R/addUIDep.R b/R/addUIDep.R new file mode 100644 index 0000000..420d4d2 --- /dev/null +++ b/R/addUIDep.R @@ -0,0 +1,10 @@ +#AddUIDep function used in tox summary app + +addUIDep <- function(x) { + jqueryUIDep <- htmltools::htmlDependency("jqueryui", "1.10.4", + c(href = "shared/jqueryui/1.10.4"), + script = "jquery-ui.min.js", + stylesheet = "jquery-ui.min.css" + ) + htmltools::attachDependencies(x, c(htmltools::htmlDependencies(x), list(jqueryUIDep))) +} \ No newline at end of file diff --git a/R/get_bw_score.R b/R/get_bw_score.R new file mode 100644 index 0000000..731e902 --- /dev/null +++ b/R/get_bw_score.R @@ -0,0 +1,359 @@ + +#' @title get BW score for a given studyid +#' @param studyid Mandatory, character \cr +#' Studyid number +#' @param path_db Mandatory, character \cr +#' path of database +#' @return dataframe +#' +#' @examples +#' \dontrun{ +#' get_bw_score(studyid='1234123', path_db='path/to/database.db') +#' } +#' @export + + +#' @importFrom RSQLite dbConnect +#' @importFrom RSQLite SQLite + +get_bw_score <- function(studyid, path_db) { + +studyid <- as.character(studyid) + + +path <- path_db + con <- DBI::dbConnect(DBI::dbDriver('SQLite'), dbname = path) + + con_db <- function(domain){ + domain <- toupper(domain) + stat <- paste0('SELECT * FROM ', domain, " WHERE STUDYID = (:x)") + domain <- DBI::dbGetQuery(con, + statement = stat, + params=list(x=studyid)) + domain +} + + + #Pull relevant domain data for each domain + bw <- con_db('bw') + ts <- con_db('ts') + pooldef <- con_db('pooldef') + pp <- con_db('pp') + + Species <- ts$TSVAL[which(ts$TSPARMCD == "SPECIES")] + TRTName <- ts$TSVAL[which(ts$TSPARMCD == "TRT")] + Duration <-ts$TSVAL[which(ts$TSPARMCD == "DOSDUR")] + # "BodyWeight_zScore" calculation + # Initial BW weight calculation + + StudyInitialWeights <- data.frame("STUDYID" = NA, "USUBJID" = NA, + "BWSTRESN" = NA, "VISITDY" = NA, + "BWNOMDY" = NA, "BWNOMLBL"= NA, + "BWBLFL" = NA) + + # Initialize dataframe for unmatched USUBJIDs + UnmatchedUSUBJIDs <- data.frame("USUBJID" = character(), stringsAsFactors = FALSE) + + + ## if (TRUE){ + # Get unique USUBJIDs in the current study + unique_subjids <- unique(bw$USUBJID) + + for (currentUSUBJID in unique_subjids) { + + # Initialize an empty dataframe for this subject + SubjectInitialWeight <- data.frame() + + # Data (all rows) for the current USUBJID + subj_data <- bw[which(bw$USUBJID == currentUSUBJID), ] + + # for any row if VISITDY column data is empty replace it with the corresponding values from BWDY column + subj_data <- subj_data %>% dplyr::mutate(VISITDY = ifelse(is.na(VISITDY) | VISITDY == "", BWDY, VISITDY)) + + # 1. Check if VISITDY == 1 is present + SubjectInitialWeight <- subj_data[subj_data$VISITDY == 1, + c("STUDYID", "USUBJID", "BWSTRESN", "VISITDY","BWNOMDY","BWNOMLBL","BWBLFL")] + + + # 2. If no initial weight with VISITDY == 1, try VISITDY < 0 + if (nrow(SubjectInitialWeight) == 0) { + negative_visits <- subj_data[subj_data$VISITDY < 0, ] + if (nrow(negative_visits) > 0) { + closest_row <- which.min(abs(negative_visits$VISITDY)) + SubjectInitialWeight <- negative_visits[closest_row, c("STUDYID", "USUBJID", "BWSTRESN", "VISITDY","BWNOMDY","BWNOMLBL","BWBLFL")] + } + } + + # 3. If no initial weight with VISITDY == 1 VISITDY < 0 , try 1 1 & subj_data$VISITDY <= 5, ] + + if (nrow(five_visitdy) > 0) { + # If there are rows where 1 < VISITDY <= 5, choose the one with the minimum VISITDY value + closest_row_five <- which.min(five_visitdy$VISITDY) + SubjectInitialWeight <- five_visitdy[closest_row_five, c("STUDYID", "USUBJID", "BWSTRESN", "VISITDY", "BWNOMDY", "BWNOMLBL", "BWBLFL")] + } + } + + # 4. If no rows, if VISITDY >5 , set BWSTRESN value 0 + if (nrow(SubjectInitialWeight) == 0) { + null_visitdy_large_bw <- subj_data[subj_data$VISITDY > 5, ] + + if (nrow(null_visitdy_large_bw) > 0) { + # Set BWSTRESN to 0 for the rows that meet the condition + null_visitdy_large_bw$BWSTRESN <- 0 + + # Choose the row with the minimum BWDY value greater than 5 + closest_row_null_visitdy <- which.min(null_visitdy_large_bw$VISITDY) + SubjectInitialWeight <- null_visitdy_large_bw[closest_row_null_visitdy, c("STUDYID", "USUBJID", "BWSTRESN", "VISITDY", "BWNOMDY", "BWNOMLBL", "BWBLFL")] + } + } + # If SubjectInitialWeight is still empty, add currentUSUBJID to UnmatchedUSUBJIDs + if (nrow(SubjectInitialWeight) == 0) { + UnmatchedUSUBJIDs <- rbind(UnmatchedUSUBJIDs, data.frame(USUBJID = currentUSUBJID, stringsAsFactors = FALSE)) + } + # Store Values to "StudyInitialWeights" data frame + StudyInitialWeights <- rbind(StudyInitialWeights,SubjectInitialWeight) + } + ## } + + # remove the first row (initialized with NAs) + StudyInitialWeights <- StudyInitialWeights[-1, ] + + + #Check for the presence of duplicate "USUBJID" in "StudyInitialWeights" + + # Check for any duplicate USUBJID + duplicates_exist <- any(duplicated(StudyInitialWeights$USUBJID)) + + # Output result + ## if (duplicates_exist) { + ## ## print("There are duplicate USUBJID values in StudyInitialWeights") + ## } else { + ## print("No duplicate USUBJID values found in StudyInitialWeights") + ## } + + # see the duplicate values + if (duplicates_exist) { + duplicate_usubjids <- StudyInitialWeights$USUBJID[duplicated(StudyInitialWeights$USUBJID)] + ## print(duplicate_usubjids) + } + + # Duplicate rows handling + + # Removing duplicates based on specific column(s) + # only the first occurrence of each unique USUBJID will be kept, and subsequent duplicates will be removed + StudyInitialWeights <- StudyInitialWeights[!duplicated(StudyInitialWeights$USUBJID), ] + + + # Final day "StudyBodyWeights" calculation + + #(StudyBodyWeights)-(TERMBW)-(BoDY Weigt) calculation + + # Initialize "StudyBodyWeights" empty data frame + StudyBodyWeights <- data.frame("STUDYID" = NA, "USUBJID" = NA, "BWTESTCD" = NA, + "BWSTRESN" = NA, "VISITDY" = NA, "BWNOMDY" = NA, "BWNOMLBL"= NA, "BWBLFL" = NA) + + # Initialize dataframe for unmatched USUBJIDs + BodyWeights_UnmatchedUSUBJIDs <- data.frame("USUBJID" = character(), stringsAsFactors = FALSE) + + + if(TRUE) { + # Get unique USUBJIDs in the current study + unique_bw_subjids <- unique(bw$USUBJID) + + for (current_bw_USUBJID in unique_bw_subjids) { + + # Initialize an empty dataframe for this subject + SubjectBodyWeight <- data.frame() + + # Data (all rows) for the current USUBJID + subj_bw_data <- bw[which(bw$USUBJID == current_bw_USUBJID), ] + + # for any row if VISITDY column data is empty replace it with the corresponding values from BWDY column + subj_bw_data <- subj_bw_data %>% dplyr::mutate(VISITDY = ifelse(is.na(VISITDY) | VISITDY == "", BWDY, VISITDY)) + + + # 1. Check if BWTESTCD == TERMBW is present + SubjectBodyWeight <- subj_bw_data[subj_bw_data$BWTESTCD == "TERMBW", + c("STUDYID", "USUBJID", "BWTESTCD","BWSTRESN", "VISITDY","BWNOMDY","BWNOMLBL","BWBLFL")] + + # If BWTESTCD == TERMBW not present, + # 2. If no BWTESTCD == TERMBW,try VISITDY > 5" + # ??????????????????????should we do that ???????????????.............. + if (nrow(SubjectBodyWeight) == 0) { + positive_bw_VISITDY <- subj_bw_data[subj_bw_data$VISITDY > 5 , ] + + if (nrow(positive_bw_VISITDY) > 0) { + # choose the one with the maximum VISITDY value + max_VISITDY <- which.max(positive_bw_VISITDY$VISITDY) + SubjectBodyWeight <- positive_bw_VISITDY[max_VISITDY, c("STUDYID", "USUBJID", "BWTESTCD", "BWSTRESN", "VISITDY", "BWNOMDY", "BWNOMLBL", "BWBLFL")] + } + } + + # If SubjectInitialWeight is still empty, add currentUSUBJID to UnmatchedUSUBJIDs + if (nrow(SubjectBodyWeight) == 0) { + BodyWeights_UnmatchedUSUBJIDs <- rbind(BodyWeights_UnmatchedUSUBJIDs, data.frame(USUBJID = current_bw_USUBJID, stringsAsFactors = FALSE)) + } + + # Store Values to "StudyBodyWeights" data frame + StudyBodyWeights <- rbind(StudyBodyWeights ,SubjectBodyWeight) + } + } + + # Remove the first row (initialized with NAs) + StudyBodyWeights <- StudyBodyWeights[-1, ] + + + #Check for the presence of duplicate "USUBJID" in "StudyBodyWeights" + + # Check for any duplicate USUBJID + stbw_duplicates_exist <- any(duplicated(StudyBodyWeights$USUBJID)) + + # Output result + ## if (stbw_duplicates_exist) { + ## print("There are duplicate USUBJID values in StudyBodyWeights") + ## } else { + ## print("No duplicate USUBJID values found in StudyBodyWeights") + ## } + + # See the duplicate values + if (stbw_duplicates_exist) { + stbw_duplicate_usubjids <- StudyBodyWeights$USUBJID[duplicated(StudyBodyWeights$USUBJID)] + ## print( stbw_duplicate_usubjids) + } + + # Duplicate "StudyBodyWeights" rows handling + + # Removing duplicates based on specific column(s) + # only the first occurrence of each unique USUBJID will be kept, and subsequent duplicates will be removed + # StudyBodyWeights <- StudyBodyWeights[!duplicated(StudyBodyWeights$USUBJID), ] + + # number of unique USUBJID + unique_StudyBodyWeights_USUBJID <- length(unique(StudyBodyWeights$USUBJID)) + ## print(unique_StudyBodyWeights_USUBJID) + # + + +#################### + + + tK_animals_df <- data.frame(PP_PoolID = character(), STUDYID = character(), + USUBJID = character(), POOLID = character(), + stringsAsFactors = FALSE) + + # Initialize a data frame to keep track of studies with no POOLID + no_poolid_studies <- data.frame(STUDYID = character(), + stringsAsFactors = FALSE) + + # check for the species [# Check if the current study is a rat] + # [{# Convert Species to lowercase for case-insensitive comparison}] + + Species_lower <- tolower(Species) + + if ("rat" %in% Species_lower) { + # Create TK individuals for "Rat" studies [# Retrieve unique + # pool IDs (TKPools) from pp table] + TKPools <- unique(pp$POOLID) + + # Check if TKPools is not empty + if (length(TKPools) > 0) { +# For each pool ID in TKPools, retrieve corresponding rows from pooldef table + for (pool_id in TKPools) { + pooldef_data <- pooldef[pooldef$POOLID == pool_id, ] + + # Create a temporary data frame if pooldef_data is not empty + if (nrow(pooldef_data) > 0) { + temp_df <- data.frame(PP_PoolID = pool_id, + STUDYID = pooldef_data$STUDYID, + USUBJID = pooldef_data$USUBJID, + POOLID = pooldef_data$POOLID, + stringsAsFactors = FALSE) + + # Append the temporary data frame to the results data frame + tK_animals_df <- rbind(tK_animals_df, temp_df) + } + } + } else { + # Retrieve STUDYID for the current study + current_study_id <- bw$STUDYID[1] + + # Add study to no_poolid_studies dataframe + no_poolid_studies <- rbind(no_poolid_studies, + data.frame(STUDYID = current_study_id, + stringsAsFactors = FALSE)) + } + + } else { + # Create a empty data frame named "tK_animals_df" + tK_animals_df <- data.frame(PP_PoolID = character(), + STUDYID = character(), + USUBJID = character(), + POOLID = character(), + stringsAsFactors = FALSE) + } + + ############################# + + + + + #Substract TK animals from the "StudyInitialWeights" and StudyBodyWeights" data frame + tk_less_StudyBodyWeights <- StudyBodyWeights[!(StudyBodyWeights$USUBJID %in% tK_animals_df$USUBJID),] + + # Substract TK animals from the "StudyInitialWeights" data frame + tk_less_StudyInitialWeights <- StudyInitialWeights[!(StudyInitialWeights$USUBJID %in% tK_animals_df$USUBJID),] + + + # Rename columns in StudyInitialWeights by adding "_Init" suffix + names(tk_less_StudyInitialWeights) <- ifelse(names(tk_less_StudyInitialWeights) == "USUBJID", + "USUBJID", + paste0(names(tk_less_StudyInitialWeights), "_Init")) + + # Inner join"StudyInitialWeights" and StudyBodyWeights" + # an inner join on the USUBJID column for TK_less (StudyInitialWeights & StudyBodyWeights ) + joined_BW_df <- merge(tk_less_StudyBodyWeights, tk_less_StudyInitialWeights, by = "USUBJID") + + + # Select specific columns from joined_BW_df + BW_df_selected_column <- joined_BW_df[, c("USUBJID", "STUDYID", "BWSTRESN", "BWSTRESN_Init")] + + # Add "ARMCD","SETCD","SEX" to "selected_df" + master_CompileData <- get_compile_data(studyid = studyid, path_db = path_db) + STUDYID_less_master_CompileData <- master_CompileData[, c("USUBJID", "ARMCD","SETCD","SEX")] + BW_df_merged_ARMCD <- merge(BW_df_selected_column, STUDYID_less_master_CompileData, by = "USUBJID") + + #"Recovery animals" cleaning from "BW_df_merged_ARMCD" + # # master_CompileData is alreadyTK animals & Recovery animal cleaned + + # all_present <- all(BW_df_merged_ARMCD$USUBJID %in% master_CompileData$USUBJID) + # print(all_present) + + + # "BWzScore Calculation" + + # Create the finalbodyweight column in merged_recovery_tk_cleaned_dose_ranked_df data frame + bwzscore_BW_df <- BW_df_merged_ARMCD %>% + dplyr::mutate(finalbodyweight = abs(BWSTRESN - BWSTRESN_Init)) + + # Create the BWZSCORE column + bwzscore_BW <- bwzscore_BW_df %>% + dplyr::group_by(STUDYID) %>% + dplyr::mutate( + mean_vehicle = mean(finalbodyweight[ARMCD == "vehicle"], na.rm = TRUE), + sd_vehicle = stats::sd(finalbodyweight[ARMCD == "vehicle"], na.rm = TRUE) + ) %>% + dplyr::ungroup() %>% + dplyr::mutate( + BWZSCORE = (finalbodyweight - mean_vehicle) / sd_vehicle + ) %>% + dplyr::select(-mean_vehicle, -sd_vehicle) # Optionally remove the mean_vehicle and sd_vehicle columns + + # Filter and select specific columns + HD_BWzScore <- bwzscore_BW %>% + dplyr::filter(ARMCD == "HD") %>% + dplyr::select(STUDYID, USUBJID, SEX, BWZSCORE) +as.data.frame(HD_BWzScore) + + +} diff --git a/R/get_compile_data.R b/R/get_compile_data.R new file mode 100644 index 0000000..e29af1f --- /dev/null +++ b/R/get_compile_data.R @@ -0,0 +1,304 @@ +#' @title filter out tk and recovery animal +#' @param studyid Mandatory, character \cr +#' Studyid number +#' @param path_db Mandatory, character \cr +#' path of database +#' @return dataframe +#' +#' @examples +#' \dontrun{ +#' get_compile_data(studyid='1234123', path_db='path/to/database.db') +#' } +#' @export + +get_compile_data <- function(studyid, path_db) { + studyid <- as.character(studyid) + path <- path_db + con <- DBI::dbConnect(DBI::dbDriver('SQLite'), dbname = path) +# function for domain + con_db <- function(domain){ + domain <- toupper(domain) + stat <- paste0('SELECT * FROM ', domain, " WHERE STUDYID = (:x)") + domain <- DBI::dbGetQuery(con, + statement = stat, + params=list(x=studyid)) + domain +} + +#Pull relevant domain data for each domain + bw <- con_db('bw') + dm <- con_db('dm') + ds <- con_db('ds') + ts <- con_db('ts') + tx <- con_db('tx') + pooldef <- con_db('pooldef') + pp <- con_db('pp') + +# # Combine into list of assigned name + studyData <- list('bw' = bw, 'dm' = dm, 'ds' = ds, + 'pooldef' = pooldef, + 'ts' = ts, 'tx' = tx, 'pp' = pp) + #..Creation of compilation data...(Compilation of DM Data)......... + # Step-1 :: # CompileData is basically the compilation of DM data + CompileData <- data.frame(STUDYID = NA, Species = NA, + USUBJID = NA, SEX = NA, ARMCD = NA, SETCD = NA) + + #Pull all of the relevant DM Data + Species <- ts$TSVAL[which(ts$TSPARMCD == "SPECIES")] + TRTName <- ts$TSVAL[which(ts$TSPARMCD == "TRT")] + Duration <-ts$TSVAL[which(ts$TSPARMCD == "DOSDUR")] + + # Convert duration to days + if (any(grepl("W",Duration)) ==TRUE){ + days <- as.numeric(gsub("\\D","",Duration))*7 + } else if (any(grepl("M",Duration)) == TRUE){ + days <- as.numeric(gsub("\\D","",Duration))*7*30 + } else { + days <- as.numeric(gsub("\\D","",Duration)) + } + Duration <- paste0(days,"D") + + # Make StudyID + STUDYID <- unique(ts$STUDYID) + + # CREATE DM DATA + DMData <- data.frame(STUDYID = rep(STUDYID, length(dm$USUBJID)), + Species = rep(Species, length(dm$USUBJID)), + USUBJID = dm$USUBJID, + SEX = dm$SEX, + ARMCD = dm$ARMCD, + SETCD = dm$SETCD) + + #Add to CompileData + CompileData <- rbind(CompileData, DMData) + + # Remove NAs from the first line + CompileData <- stats::na.omit(CompileData) + + # Create a copy of CompileData which will not + # changes with changing the CompileData + CompileData_copy <- data.frame(CompileData) + + + # Step-2 :: # REMOVE THE RECOVERY ANIMALS from "CompileData"...<>"Recovery + # animals" cleaning.. using "DS domain" + ## cat("Displaying unique values in ds$DSDECOD before filtering :\n") + ## print(unique(ds$DSDECOD)) + + # filter for specific "DSDECOD" values...( Keep the mentioned four ) ... + filtered_ds <- ds %>% + dplyr::filter(DSDECOD %in% c('TERMINAL SACRIFICE', + 'MORIBUND SACRIFICE', + 'REMOVED FROM STUDY ALIVE', + 'NON-MORIBUND SACRIFICE')) + # check the unique value in "DSDECOD" column + ## cat("Displaying unique values in ds$DSDECOD after filtering:\n") + ## print(unique(filtered_ds$DSDECOD)) + + #Filter "CompileData" to keep rows where USUBJID is in "filtered_ds"~~ + + # Filter "CompileData" to keep rows where USUBJID is in "filtered_ds" + # meaning removing recovery animals + recovery_cleaned_CompileData <- CompileData %>% + dplyr::filter(USUBJID %in% filtered_ds$USUBJID) + + + # Step-3 :: # REMOVE THE TK ANIMALS IF SPECIES IS RAT from the + # "recovery_cleaned_CompileData" + # Initialize an empty data frame to store the results + tK_animals_df <- data.frame(PP_PoolID = character(), STUDYID = character(), + USUBJID = character(), POOLID = character(), + stringsAsFactors = FALSE) + + # Initialize a data frame to keep track of studies with no POOLID + no_poolid_studies <- data.frame(STUDYID = character(), + stringsAsFactors = FALSE) + + # check for the species [# Check if the current study is a rat] + # [{# Convert Species to lowercase for case-insensitive comparison}] + + Species_lower <- tolower(Species) + + if ("rat" %in% Species_lower) { + # Create TK individuals for "Rat" studies [# Retrieve unique + # pool IDs (TKPools) from pp table] + TKPools <- unique(pp$POOLID) + + # Check if TKPools is not empty + if (length(TKPools) > 0) { +# For each pool ID in TKPools, retrieve corresponding rows from pooldef table + for (pool_id in TKPools) { + pooldef_data <- pooldef[pooldef$POOLID == pool_id, ] + + # Create a temporary data frame if pooldef_data is not empty + if (nrow(pooldef_data) > 0) { + temp_df <- data.frame(PP_PoolID = pool_id, + STUDYID = pooldef_data$STUDYID, + USUBJID = pooldef_data$USUBJID, + POOLID = pooldef_data$POOLID, + stringsAsFactors = FALSE) + + # Append the temporary data frame to the results data frame + tK_animals_df <- rbind(tK_animals_df, temp_df) + } + } + } else { + # Retrieve STUDYID for the current study + current_study_id <- bw$STUDYID[1] + + # Add study to no_poolid_studies dataframe + no_poolid_studies <- rbind(no_poolid_studies, + data.frame(STUDYID = current_study_id, + stringsAsFactors = FALSE)) + } + + } else { + # Create a empty data frame named "tK_animals_df" + tK_animals_df <- data.frame(PP_PoolID = character(), + STUDYID = character(), + USUBJID = character(), + POOLID = character(), + stringsAsFactors = FALSE) + } + + + # Subtract "TK_animals_df" data from the "recovery_cleaned_CompileData" + cleaned_CompileData <- recovery_cleaned_CompileData[ + !(recovery_cleaned_CompileData$USUBJID %in% tK_animals_df$USUBJID),] + + + + #.."vehicle" and "HD animals" selection "for"cleaned_CompileData" + + # tx table filter by TXPARMCD + cleaned_CompileData_filtered_tx <- tx %>% + dplyr::filter(TXPARMCD == "TRTDOS") + + + # Assign the dose level for + # "cleaned_CompileData_filtered_tx" + + # Step 1: Create a unified separator pattern + clean_pattern <- ";|\\||-|/|:|," + + # Split and expand the TXVAL column, and add row_state + clean_tx_expanded <- cleaned_CompileData_filtered_tx %>% + dplyr::mutate( + is_split = stringr::str_detect(TXVAL, + clean_pattern), + TXVAL = strsplit(as.character(TXVAL), + clean_pattern) + ) %>% + tidyr::unnest(TXVAL) %>% + dplyr::mutate( + TXVAL = as.numeric(TXVAL), + row_state = ifelse(is_split, "new_row", "old_row") + ) %>% + dplyr::select(-is_split) # Remove the is_split column + + #Adding dose_ranking + + # Initialize an empty data frame for dose_ranking + dose_ranking <- data.frame() + + dose_ranking_prob_study <- data.frame() + + if (TRUE) { + study_data <- clean_tx_expanded + + # Check if all TXVAL values are NA for the STUDYID + if (all(is.na(study_data$TXVAL))) { + dose_ranking_prob_study <- rbind(dose_ranking_prob_study, study_data) + } + # Check if all SETCD values are the same for the STUDYID + else if (dplyr::n_distinct(study_data$SETCD) == 1) { + dose_ranking_prob_study <- rbind(dose_ranking_prob_study, study_data) + } else { + # Process for lowest TXVAL + lowest_txval <- min(study_data$TXVAL, na.rm = TRUE) + lowest_data <- study_data %>% + dplyr::filter(TXVAL == lowest_txval) %>% + dplyr::arrange(SETCD) + + if (nrow(lowest_data) == 1) { + dose_ranking <- rbind(dose_ranking, lowest_data) + + } else { + # Select the first old_row if available, else the first new_row + selected_lowest <- dplyr::filter(lowest_data, + row_state == "old_row") %>% + dplyr::slice(1) + if (nrow(selected_lowest) > 0) { + dose_ranking <- rbind(dose_ranking, selected_lowest) + } else { + selected_lowest <- dplyr::filter(lowest_data, + row_state == "new_row") %>% + dplyr::slice(1) + dose_ranking <- rbind(dose_ranking, selected_lowest) + } + } + + # Process for highest TXVAL + highest_txval <- max(study_data$TXVAL, na.rm = TRUE) + highest_data <- study_data %>% + dplyr::filter(TXVAL == highest_txval) %>% + dplyr::arrange(SETCD) + + if (nrow(highest_data) == 1) { + dose_ranking <- rbind(dose_ranking, highest_data) + }else if (nrow(highest_data) > 1) { + selected_highest <- dplyr::filter(highest_data, + row_state == "old_row") %>% + dplyr::slice(1) + if (nrow(selected_highest) > 0) { + dose_ranking <- rbind(dose_ranking, selected_highest) + } else { + # If no old_row is found, select the first new_row + selected_highest <- dplyr::filter(highest_data, + row_state == "new_row") %>% + dplyr::slice(1) + if (nrow(selected_highest) > 0) { + dose_ranking <- rbind(dose_ranking, selected_highest) + + } + } + } + } + } + + #ADD DOSE_RANKING column in "selected_rows" data frame + DOSE_RANKED_selected_rows <- dose_ranking %>% + dplyr::group_by(STUDYID) %>% + dplyr::mutate( + MinTXVAL = min(TXVAL), + MaxTXVAL = max(TXVAL), + DOSE_RANKING = dplyr::case_when( + TXVAL == MinTXVAL & TXVAL == MaxTXVAL ~ "Both", + TXVAL == MinTXVAL ~ "vehicle", + TXVAL == MaxTXVAL ~ "HD", + TRUE ~ "Intermediate" + ) + ) %>% + dplyr::select(-MinTXVAL, -MaxTXVAL) %>% + dplyr::ungroup() + + #Merging "DOSE_RANKED_selected_rows" and "cleaned_CompileData" data framed + dose_rank_comp_data <- dplyr::inner_join(cleaned_CompileData, + DOSE_RANKED_selected_rows, + by = c("STUDYID", "SETCD")) + + # rename the Data frame + master_CompileData1 <- dose_rank_comp_data [,c("STUDYID", + "USUBJID", + "Species", + "SEX", + "DOSE_RANKING", + "SETCD")] + + # Rename the "DOSE_RANKING" column to ARMCD + # Rename "DOSE_RANKING" to "ARMCD" in master_CompileData + master_CompileData <- master_CompileData1 %>% + dplyr::rename(ARMCD = DOSE_RANKING) + + master_CompileData +} diff --git a/R/get_doses.R b/R/get_doses.R new file mode 100644 index 0000000..e3adb6f --- /dev/null +++ b/R/get_doses.R @@ -0,0 +1,322 @@ +#' @title filter out tk and recovery animal +#' @param studyid Mandatory, character \cr +#' Studyid number +#' @param path_db Mandatory, character \cr +#' path of database +#' @return dataframe +#' +#' @examples +#' \dontrun{ +#' get_doses(studyid='1234123', path_db='path/to/database.db') +#' } +#' @export + +get_doses <- function(studyid, path_db,xpt_dir=NULL) { + + if(!is.null(xpt_dir)) { +bw <- haven::read_xpt(fs::path(xpt_dir,'bw.xpt')) +dm <- haven::read_xpt(fs::path(xpt_dir,'dm.xpt')) +ds <- haven::read_xpt(fs::path(xpt_dir,'ds.xpt')) +ts <- haven::read_xpt(fs::path(xpt_dir,'ts.xpt')) +tx <- haven::read_xpt(fs::path(xpt_dir,'tx.xpt')) +pooldef <- haven::read_xpt(fs::path(xpt_dir,'pooldef.xpt')) +pp <- haven::read_xpt(fs::path(xpt_dir,'pp.xpt')) +## bw <- haven::read_xpt(fs::path(xpt_dir,'bw.xpt')) + + + } else { + + studyid <- as.character(studyid) + path <- path_db + con <- DBI::dbConnect(DBI::dbDriver('SQLite'), dbname = path) +# function for domain + con_db <- function(domain){ + domain <- toupper(domain) + stat <- paste0('SELECT * FROM ', domain, " WHERE STUDYID = (:x)") + domain <- DBI::dbGetQuery(con, + statement = stat, + params=list(x=studyid)) + domain +} + +#Pull relevant domain data for each domain + bw <- con_db('bw') + dm <- con_db('dm') + ds <- con_db('ds') + ts <- con_db('ts') + tx <- con_db('tx') + pooldef <- con_db('pooldef') + pp <- con_db('pp') + + } + + +# # Combine into list of assigned name + studyData <- list('bw' = bw, 'dm' = dm, 'ds' = ds, + 'pooldef' = pooldef, + 'ts' = ts, 'tx' = tx, 'pp' = pp) + #..Creation of compilation data...(Compilation of DM Data)......... + # Step-1 :: # CompileData is basically the compilation of DM data + CompileData <- data.frame(STUDYID = NA, Species = NA, + USUBJID = NA, SEX = NA, ARMCD = NA, SETCD = NA) + + #Pull all of the relevant DM Data + Species <- ts$TSVAL[which(ts$TSPARMCD == "SPECIES")] + TRTName <- ts$TSVAL[which(ts$TSPARMCD == "TRT")] + Duration <-ts$TSVAL[which(ts$TSPARMCD == "DOSDUR")] + + # Convert duration to days + if (any(grepl("W",Duration)) ==TRUE){ + days <- as.numeric(gsub("\\D","",Duration))*7 + } else if (any(grepl("M",Duration)) == TRUE){ + days <- as.numeric(gsub("\\D","",Duration))*7*30 + } else { + days <- as.numeric(gsub("\\D","",Duration)) + } + Duration <- paste0(days,"D") + + # Make StudyID + STUDYID <- unique(ts$STUDYID) + + # CREATE DM DATA + DMData <- data.frame(STUDYID = rep(STUDYID, length(dm$USUBJID)), + Species = rep(Species, length(dm$USUBJID)), + USUBJID = dm$USUBJID, + SEX = dm$SEX, + ARMCD = dm$ARMCD, + SETCD = dm$SETCD) + + #Add to CompileData + CompileData <- rbind(CompileData, DMData) + + # Remove NAs from the first line + CompileData <- stats::na.omit(CompileData) + + # Create a copy of CompileData which will not + # changes with changing the CompileData + CompileData_copy <- data.frame(CompileData) + + + # Step-2 :: # REMOVE THE RECOVERY ANIMALS from "CompileData"...<>"Recovery + # animals" cleaning.. using "DS domain" + ## cat("Displaying unique values in ds$DSDECOD before filtering :\n") + ## print(unique(ds$DSDECOD)) + + # filter for specific "DSDECOD" values...( Keep the mentioned four ) ... + filtered_ds <- ds %>% + dplyr::filter(DSDECOD %in% c('TERMINAL SACRIFICE', + 'MORIBUND SACRIFICE', + 'REMOVED FROM STUDY ALIVE', + 'NON-MORIBUND SACRIFICE')) + # check the unique value in "DSDECOD" column + ## cat("Displaying unique values in ds$DSDECOD after filtering:\n") + ## print(unique(filtered_ds$DSDECOD)) + + #Filter "CompileData" to keep rows where USUBJID is in "filtered_ds"~~ + + # Filter "CompileData" to keep rows where USUBJID is in "filtered_ds" + # meaning removing recovery animals + recovery_cleaned_CompileData <- CompileData %>% + dplyr::filter(USUBJID %in% filtered_ds$USUBJID) + + + # Step-3 :: # REMOVE THE TK ANIMALS IF SPECIES IS RAT from the + # "recovery_cleaned_CompileData" + # Initialize an empty data frame to store the results + tK_animals_df <- data.frame(PP_PoolID = character(), STUDYID = character(), + USUBJID = character(), POOLID = character(), + stringsAsFactors = FALSE) + + # Initialize a data frame to keep track of studies with no POOLID + no_poolid_studies <- data.frame(STUDYID = character(), + stringsAsFactors = FALSE) + + # check for the species [# Check if the current study is a rat] + # [{# Convert Species to lowercase for case-insensitive comparison}] + + Species_lower <- tolower(Species) + + if ("rat" %in% Species_lower) { + # Create TK individuals for "Rat" studies [# Retrieve unique + # pool IDs (TKPools) from pp table] + TKPools <- unique(pp$POOLID) + + # Check if TKPools is not empty + if (length(TKPools) > 0) { +# For each pool ID in TKPools, retrieve corresponding rows from pooldef table + for (pool_id in TKPools) { + pooldef_data <- pooldef[pooldef$POOLID == pool_id, ] + + # Create a temporary data frame if pooldef_data is not empty + if (nrow(pooldef_data) > 0) { + temp_df <- data.frame(PP_PoolID = pool_id, + STUDYID = pooldef_data$STUDYID, + USUBJID = pooldef_data$USUBJID, + POOLID = pooldef_data$POOLID, + stringsAsFactors = FALSE) + + # Append the temporary data frame to the results data frame + tK_animals_df <- rbind(tK_animals_df, temp_df) + } + } + } else { + # Retrieve STUDYID for the current study + current_study_id <- bw$STUDYID[1] + + # Add study to no_poolid_studies dataframe + no_poolid_studies <- rbind(no_poolid_studies, + data.frame(STUDYID = current_study_id, + stringsAsFactors = FALSE)) + } + + } else { + # Create a empty data frame named "tK_animals_df" + tK_animals_df <- data.frame(PP_PoolID = character(), + STUDYID = character(), + USUBJID = character(), + POOLID = character(), + stringsAsFactors = FALSE) + } + + + # Subtract "TK_animals_df" data from the "recovery_cleaned_CompileData" + cleaned_CompileData <- recovery_cleaned_CompileData[ + !(recovery_cleaned_CompileData$USUBJID %in% tK_animals_df$USUBJID),] + + + + #.."vehicle" and "HD animals" selection "for"cleaned_CompileData" + + # tx table filter by TXPARMCD + cleaned_CompileData_filtered_tx <- tx %>% + dplyr::filter(TXPARMCD == "TRTDOS") + + + # Assign the dose level for + # "cleaned_CompileData_filtered_tx" + + # Step 1: Create a unified separator pattern + clean_pattern <- ";|\\||-|/|:|," + + # Split and expand the TXVAL column, and add row_state + clean_tx_expanded <- cleaned_CompileData_filtered_tx %>% + dplyr::mutate( + is_split = stringr::str_detect(TXVAL, + clean_pattern), + TXVAL = strsplit(as.character(TXVAL), + clean_pattern) + ) %>% + tidyr::unnest(TXVAL) %>% + dplyr::mutate( + TXVAL = as.numeric(TXVAL), + row_state = ifelse(is_split, "new_row", "old_row") + ) %>% + dplyr::select(-is_split) # Remove the is_split column + + #Adding dose_ranking + + # Initialize an empty data frame for dose_ranking + dose_ranking <- data.frame() + + dose_ranking_prob_study <- data.frame() + + ## browser() + if (TRUE) { + study_data <- clean_tx_expanded + + # Check if all TXVAL values are NA for the STUDYID + if (all(is.na(study_data$TXVAL))) { + dose_ranking_prob_study <- rbind(dose_ranking_prob_study, study_data) + } + # Check if all SETCD values are the same for the STUDYID + else if (dplyr::n_distinct(study_data$SETCD) == 1) { + dose_ranking_prob_study <- rbind(dose_ranking_prob_study, study_data) + } else { + # Process for lowest TXVAL + lowest_txval <- min(study_data$TXVAL, na.rm = TRUE) + lowest_data <- study_data %>% + dplyr::filter(TXVAL == lowest_txval) %>% + dplyr::arrange(SETCD) + + if (nrow(lowest_data) == 1) { + dose_ranking <- rbind(dose_ranking, lowest_data) + + } else { + # Select the first old_row if available, else the first new_row + selected_lowest <- dplyr::filter(lowest_data, + row_state == "old_row") %>% + dplyr::slice(1) + if (nrow(selected_lowest) > 0) { + dose_ranking <- rbind(dose_ranking, selected_lowest) + } else { + selected_lowest <- dplyr::filter(lowest_data, + row_state == "new_row") %>% + dplyr::slice(1) + dose_ranking <- rbind(dose_ranking, selected_lowest) + } + } + + # Process for highest TXVAL + highest_txval <- max(study_data$TXVAL, na.rm = TRUE) + highest_data <- study_data %>% + dplyr::filter(TXVAL == highest_txval) %>% + dplyr::arrange(SETCD) + + if (nrow(highest_data) == 1) { + dose_ranking <- rbind(dose_ranking, highest_data) + }else if (nrow(highest_data) > 1) { + selected_highest <- dplyr::filter(highest_data, + row_state == "old_row") %>% + dplyr::slice(1) + if (nrow(selected_highest) > 0) { + dose_ranking <- rbind(dose_ranking, selected_highest) + } else { + # If no old_row is found, select the first new_row + selected_highest <- dplyr::filter(highest_data, + row_state == "new_row") %>% + dplyr::slice(1) + if (nrow(selected_highest) > 0) { + dose_ranking <- rbind(dose_ranking, selected_highest) + + } + } + } + } + } + + #ADD DOSE_RANKING column in "selected_rows" data frame + DOSE_RANKED_selected_rows <- dose_ranking %>% + dplyr::group_by(STUDYID) %>% + dplyr::mutate( + MinTXVAL = min(TXVAL), + MaxTXVAL = max(TXVAL), + DOSE_RANKING = dplyr::case_when( + TXVAL == MinTXVAL & TXVAL == MaxTXVAL ~ "Both", + TXVAL == MinTXVAL ~ "vehicle", + TXVAL == MaxTXVAL ~ "HD", + TRUE ~ "Intermediate" + ) + ) %>% + dplyr::select(-MinTXVAL, -MaxTXVAL) %>% + dplyr::ungroup() + + #Merging "DOSE_RANKED_selected_rows" and "cleaned_CompileData" data framed + dose_rank_comp_data <- dplyr::inner_join(cleaned_CompileData, + DOSE_RANKED_selected_rows, + by = c("STUDYID", "SETCD")) + + # rename the Data frame + master_CompileData1 <- dose_rank_comp_data [,c("STUDYID", + "USUBJID", + "Species", + "SEX", + "DOSE_RANKING", + "SETCD")] + + # Rename the "DOSE_RANKING" column to ARMCD + # Rename "DOSE_RANKING" to "ARMCD" in master_CompileData + master_CompileData <- master_CompileData1 %>% + dplyr::rename(ARMCD = DOSE_RANKING) + + master_CompileData +} diff --git a/R/get_final_score.R b/R/get_final_score.R new file mode 100644 index 0000000..f73bc3e --- /dev/null +++ b/R/get_final_score.R @@ -0,0 +1,51 @@ +## This code is to get score + +## ----------------------------------------------------------------------------- +## Date Programmer +## ---------- -------------------------------------------------------------- +## Mar-31-2024 Md Yousuf Ali (md.ali@fda.hhs.gov) + +#' @title get all score +#' @param studyid Mandatory, character \cr +#' Studyid number +#' @param path_db Mandatory, character \cr +#' path of database +#' @return dataframe +#' +#' @param domain Mandatory, character or vector \cr +#' either string or vector of domain name +#' @examples +#' \dontrun{ +#' get_all_score(studyid='1234123', path_db='path/to/database.db', domain=c('lb')) +#' } +#' @export + +get_all_score <- function(studyid, path_db, domain= c('lb','mi', 'bw')) { + +studyid <- as.character(studyid) + path_db <- fs::path(path_db) + domain_len <- length(domain) +result_return <- list(studyid_res = studyid) + for(i in 1:domain_len){ + cur_dom <- domain[i] + if(cur_dom=='lb'){ + df <- get_lb_score(studyid, path_db) + + }else if(cur_dom=='mi') { + + df <- get_mi_score(studyid, path_db) + + } else if (cur_dom=='bw'){ + + df <- get_bw_score(studyid, path_db) + + } else{ + stop('check your domain') + + } + + ## result_return[[studyid]][[cur_dom]] <- df + result_return[[cur_dom]] <- df + } +result_return +} diff --git a/R/get_lb_score.R b/R/get_lb_score.R new file mode 100644 index 0000000..cb1f5ab --- /dev/null +++ b/R/get_lb_score.R @@ -0,0 +1,328 @@ + +#' @title get LB score for a given studyid +#' @param studyid Mandatory, character \cr +#' Studyid number +#' @param path_db Mandatory, character \cr +#' path of database +#' @return score +#' +#' @examples +#' \dontrun{ +#' get_lb_score(studyid='1234123', path_db='path/to/database.db') +#' } +#' @export + +get_lb_score <- function(studyid, path_db) { + +studyid <- as.character(studyid) +path <- path_db + con <- DBI::dbConnect(DBI::dbDriver('SQLite'), dbname = path) + lb <- DBI::dbGetQuery(con, statement = "SELECT * FROM LB WHERE STUDYID = (:x)", + params = list(x=studyid)) + organTESTCDlist <- list('LIVER' = c('SERUM | ALT', + 'SERUM | AST', + 'SERUM | ALP', + 'SERUM | GGT', + 'SERUM | BILI', + 'SERUM | ALB', + 'PLASMA | ALT', + 'PLASMA | AST', + 'PLASMA | ALP', + 'PLASMA | GGT', + 'PLASMA | BILI', + 'PLASMA | ALB', + 'WHOLE BLOOD | ALT', + 'WHOLE BLOOD | AST', + 'WHOLE BLOOD | ALP', + 'WHOLE BLOOD | GGT', + 'WHOLE BLOOD | BILI', + 'WHOLE BLOOD | ALB')) + + #Make LB Data Data Frame to Hold Information + LBData <- data.frame("STUDYID" = NA,"USUBJID" = NA,"LBSPEC" = NA,"LBTESTCD" = NA, + "LBSTRESN" = NA, "VISITDY" = NA) + + # for (Name in unique(filtered_combined_lb$STUDYID)) { + # Filter the data for the current STUDYID + study_data_LB <- lb + + # Check if LBDY column exists and process accordingly + if ("LBDY" %in% names(study_data_LB)) { + LBD <- study_data_LB %>% + dplyr::filter(LBDY >= 1) %>% + dplyr::select(STUDYID,USUBJID, LBSPEC, LBTESTCD, LBSTRESN, LBDY) + + colnames(LBD) <- c("STUDYID", "USUBJID", "LBSPEC", "LBTESTCD", "LBSTRESN", "VISITDY") + + # Convert LBCAT to LBSPEC if LBSPEC is NA + if (all(is.na(LBD$LBSPEC))) { + LBD$LBSPEC <- study_data_LB$LBCAT[study_data_LB$LBDY >= 1] + + if (any(c("HEMATOLOGY", "Hematology","hematology") %in% levels(LBD$LBSPEC))){ + levels(LBD$LBSPEC)[match(c("HEMATOLOGY", "Hematology","hematology"), + levels(LBD$LBSPEC))] <- "WHOLE BLOOD" + } + if (any(c("CLINICAL CHEMISTRY","Clinical Chemistry") %in% levels(LBD$LBSPEC))){ + levels(LBD$LBSPEC)[match(c("CLINICAL CHEMISTRY","Clinical Chemistry"), + levels(LBD$LBSPEC))] <- "SERUM" + } + if (any(c("URINALYSIS","Urinalysis") %in% levels(LBD$LBSPEC))){ + levels(LBD$LBSPEC)[match(c("URINALYSIS","Urinalysis"), + levels(LBD$LBSPEC))] <- "URINE" + } + } + } else { + # If LBDY column does not exist, handle accordingly + LBD <- study_data_LB[which(study_data_LB$VISITDY >= 1), + c("STUDYID","USUBJID","LBSPEC","LBTESTCD","LBSTRESN", "VISITDY")] + } + + # Add to LBData + LBData <- rbind(LBData, LBD) + + # Remove rows with all NAs + LBData <- stats::na.omit(LBData) + + # Concatenate LBSPEC and LBTESTCD + LBData$LBTESTCD <- paste(LBData$LBSPEC, LBData$LBTESTCD, sep = ' | ') + + #Remove Not Included Tests............................................................... + # This step remove not rows matching test from ogransystem + test_cleaned_LBData <- LBData[LBData$LBTESTCD %in% organTESTCDlist[['LIVER']],] + + # Create a new data frame with the row having the max VISITDY for each USUBJID and LBTESTCD combination + max_visitdy_df <- test_cleaned_LBData %>% + dplyr::group_by(USUBJID, LBTESTCD) %>% + dplyr::filter(VISITDY == max(VISITDY, na.rm = TRUE)) %>% + dplyr::ungroup() + + # get master compile data + master_CompileData <- get_compile_data(studyid, path_db) + #<><><><><><><><><><><><><><><><>... Remove TK animals and Recovery animals......<><><><><><>............. + #<><><><><><><><> master_CompileData is free of TK animals and Recovery animals<><><><><><><><><><><><><><> + # Remove the TK animals and Recovery animals + LB_tk_recovery_filtered <- max_visitdy_df %>% + dplyr::filter(USUBJID %in% master_CompileData$USUBJID) + + # Perform a left join to match USUBJID and get ARMCD ## 020924 + #-inner_join() used instead of left_join()#199 + LB_tk_recovery_filtered_ARMCD <- LB_tk_recovery_filtered %>% + dplyr::inner_join(master_CompileData %>% dplyr::select(USUBJID, ARMCD), by = "USUBJID") + + + #::::::::::::::::::::::::::::: "zScore Calculation" for LB data:::::::::::::::::::::::::::::::::::::::::::::::::::: + # First subset the LB_tk_recovery_filtered_ARMCD data frame ..................................................... + + # ........................Filtering data for each unique "LBTESTCD" value......................... + + # 1. Sub-setting for 'SERUM | ALT' data frame for "LBzScore Calculation" for...'SERUM | ALT'........... + df_serum_alt <- LB_tk_recovery_filtered_ARMCD %>% + dplyr::filter(LBTESTCD == 'SERUM | ALT' | LBTESTCD == 'PLASMA | ALT'| LBTESTCD == 'WHOLE BLOOD | ALT') + + # calculate the zscore of 'SERUM | ALT' + zscore_serum_alt <- df_serum_alt %>% + dplyr::group_by(STUDYID) %>% + dplyr::mutate( + mean_vehicle_alt = mean(LBSTRESN[ARMCD == "vehicle"], na.rm = TRUE), + sd_vehicle_alt = stats::sd(LBSTRESN[ARMCD == "vehicle"], na.rm = TRUE) + ) %>% + dplyr::ungroup() %>% + dplyr::mutate( + alt_zscore = (LBSTRESN - mean_vehicle_alt) / sd_vehicle_alt + )%>% + dplyr::mutate(alt_zscore = abs(alt_zscore)) + + # averaged zscore per STUDYID for 'SERUM | ALT' + serum_alt_final_zscore <- zscore_serum_alt %>% + dplyr::filter(ARMCD == "HD") %>% # Step 1: Filter for HD + dplyr::group_by(STUDYID) %>% # Step 2: Group by STUDYID + dplyr::summarise( + avg_alt_zscore = mean(alt_zscore, na.rm = TRUE), # Step 3: Average alt_zscore + LBTESTCD = dplyr::first(LBTESTCD) # Include LBTESTCD in the summarized data + ) %>% dplyr::select (STUDYID, avg_alt_zscore ) + + + # 2. Sub-setting for 'SERUM | AST' data frame for "BWzScore Calculation" for...'SERUM | AST'........... + df_serum_ast <- LB_tk_recovery_filtered_ARMCD %>% + dplyr::filter(LBTESTCD == 'SERUM | AST' | LBTESTCD == 'PLASMA | AST'| LBTESTCD == 'WHOLE BLOOD | AST') + + # calculate the zscore of 'SERUM | AST' + zscore_serum_ast <- df_serum_ast %>% + dplyr::group_by(STUDYID) %>% + dplyr::mutate( + mean_vehicle_ast = mean(LBSTRESN[ARMCD == "vehicle"], na.rm = TRUE), + sd_vehicle_ast = stats::sd(LBSTRESN[ARMCD == "vehicle"], na.rm = TRUE) + ) %>% + dplyr::ungroup() %>% + dplyr::mutate( + ast_zscore = (LBSTRESN - mean_vehicle_ast) / sd_vehicle_ast + )%>% + dplyr::mutate(ast_zscore = abs(ast_zscore)) + + # averaged zscore per STUDYID for 'SERUM | AST' + serum_ast_final_zscore <- zscore_serum_ast %>% + dplyr::filter(ARMCD == "HD") %>% # Step 1: Filter for HD + dplyr::group_by(STUDYID) %>% # Step 2: Group by STUDYID + dplyr::summarise( + avg_ast_zscore = mean(ast_zscore, na.rm = TRUE), # Step 3: Average alt_zscore + LBTESTCD = dplyr::first(LBTESTCD) # Include LBTESTCD in the summarized data + ) %>% dplyr::select(STUDYID, avg_ast_zscore) + + # 3........Sub-setting for 'SERUM | ALP' data frame for "BWzScore Calculation" for...'SERUM | ALP'........... + df_serum_alp <- LB_tk_recovery_filtered_ARMCD %>% + dplyr::filter(LBTESTCD == 'SERUM | ALP'| LBTESTCD == 'PLASMA | ALP'| LBTESTCD == 'WHOLE BLOOD | ALP') + + # calculate the zscore of 'SERUM | ALP' + zscore_serum_alp <- df_serum_alp %>% + dplyr::group_by(STUDYID) %>% + dplyr::mutate( + mean_vehicle_alp = mean(LBSTRESN[ARMCD == "vehicle"], na.rm = TRUE), + sd_vehicle_alp = stats::sd(LBSTRESN[ARMCD == "vehicle"], na.rm = TRUE) + ) %>% + dplyr::ungroup() %>% + dplyr::mutate( + alp_zscore = (LBSTRESN - mean_vehicle_alp) / sd_vehicle_alp + )%>% + dplyr::mutate(alp_zscore = abs(alp_zscore)) + + # averaged zscore per STUDYID for 'SERUM | ALP' + serum_alp_final_zscore <- zscore_serum_alp %>% + dplyr::filter(ARMCD == "HD") %>% # Step 1: Filter for HD + dplyr::group_by(STUDYID) %>% # Step 2: Group by STUDYID + dplyr::summarise( + avg_alp_zscore = mean(alp_zscore, na.rm = TRUE), # Step 3: Average alt_zscore + LBTESTCD = dplyr::first(LBTESTCD) # Include LBTESTCD in the summarized data + ) %>% dplyr::select (STUDYID, avg_alp_zscore) + + # 4. Sub-setting for 'SERUM | GGT' data frame for "BWzScore Calculation" for...'SERUM | GGT'........... + df_serum_ggt <- LB_tk_recovery_filtered_ARMCD %>% + dplyr::filter(LBTESTCD == 'SERUM | GGT'| LBTESTCD == 'PLASMA | GGT'| LBTESTCD == 'WHOLE BLOOD | GGT') + + # calculate the zscore of 'SERUM | GGT' + zscore_serum_ggt <- df_serum_ggt %>% + dplyr::group_by(STUDYID) %>% + dplyr::mutate( + mean_vehicle_ggt = mean(LBSTRESN[ARMCD == "vehicle"], na.rm = TRUE), + sd_vehicle_ggt = stats::sd(LBSTRESN[ARMCD == "vehicle"], na.rm = TRUE) + ) %>% + dplyr::ungroup() %>% + dplyr::mutate( + ggt_zscore = (LBSTRESN - mean_vehicle_ggt) / sd_vehicle_ggt + )%>% + dplyr::mutate(ggt_zscore = abs(ggt_zscore)) + + # averaged zscore per STUDYID for 'SERUM | GGT' + serum_ggt_final_zscore <- zscore_serum_ggt %>% + dplyr::filter(ARMCD == "HD") %>% # Step 1: Filter for HD + dplyr::group_by(STUDYID) %>% # Step 2: Group by STUDYID + dplyr::summarise( + avg_ggt_zscore = mean(ggt_zscore, na.rm = TRUE), # Step 3: Average alt_zscore + LBTESTCD = dplyr::first(LBTESTCD) # Include LBTESTCD in the summarized data + ) %>% dplyr::select(STUDYID, avg_ggt_zscore) + + #5. Sub-setting for 'SERUM | BILI' data frame for "BWzScore Calculation" for...'SERUM | BILI'........... + df_serum_bili <- LB_tk_recovery_filtered_ARMCD %>% + dplyr::filter(LBTESTCD == 'SERUM | BILI'| LBTESTCD == 'PLASMA | BILI'| LBTESTCD == 'WHOLE BLOOD | BILI') + + # calculate the zscore of 'SERUM | BILI' + zscore_serum_bili <- df_serum_bili %>% + dplyr::group_by(STUDYID) %>% + dplyr::mutate( + mean_vehicle_bili = mean(LBSTRESN[ARMCD == "vehicle"], na.rm = TRUE), + sd_vehicle_bili = stats::sd(LBSTRESN[ARMCD == "vehicle"], na.rm = TRUE) + ) %>% + dplyr::ungroup() %>% + dplyr::mutate( + bili_zscore = (LBSTRESN - mean_vehicle_bili) / sd_vehicle_bili + )%>% + dplyr::mutate(bili_zscore = abs(bili_zscore)) + + # averaged zscore per STUDYID for 'SERUM | BILI' + serum_bili_final_zscore <- zscore_serum_bili %>% + dplyr::filter(ARMCD == "HD") %>% # Step 1: Filter for HD + dplyr::group_by(STUDYID) %>% # Step 2: Group by STUDYID + dplyr::summarise( + avg_bili_zscore = mean(bili_zscore, na.rm = TRUE), # Step 3: Average alt_zscore + LBTESTCD = dplyr::first(LBTESTCD) # Include LBTESTCD in the summarized data + ) %>% dplyr::select(STUDYID, avg_bili_zscore) + + # 6. Sub-setting for 'SERUM | ALB' data frame for "BWzScore Calculation" for...'SERUM | ALB'........... + df_serum_alb <- LB_tk_recovery_filtered_ARMCD %>% + dplyr::filter(LBTESTCD == 'SERUM | ALB'| LBTESTCD == 'PLASMA | ALB'| LBTESTCD == 'WHOLE BLOOD | ALB') + + # calculte the zscore of 'SERUM | ALB' + zscore_serum_alb <- df_serum_alb %>% + dplyr::group_by(STUDYID) %>% + dplyr::mutate( + mean_vehicle_alb = mean(LBSTRESN[ARMCD == "vehicle"], na.rm = TRUE), + sd_vehicle_alb = stats::sd(LBSTRESN[ARMCD == "vehicle"], na.rm = TRUE) + ) %>% + dplyr::ungroup() %>% + dplyr::mutate( + alb_zscore = (LBSTRESN - mean_vehicle_alb) / sd_vehicle_alb + )%>% + dplyr::mutate(alb_zscore = abs(alb_zscore)) + + # averaged zscore per STUDYID for 'SERUM | ALB' + serum_alb_final_zscore <- zscore_serum_alb %>% + dplyr::filter(ARMCD == "HD") %>% # Step 1: Filter for HD + dplyr::group_by(STUDYID) %>% # Step 2: Group by STUDYID + dplyr::summarise( + avg_alb_zscore = mean(alb_zscore, na.rm = TRUE), # Step 3: Average alt_zscore + LBTESTCD = dplyr::first(LBTESTCD) # Include LBTESTCD in the summarized data + ) %>% dplyr::select(STUDYID, avg_alb_zscore) + + # Merging----------LB----zscores------------values--------------------------- + LB_zscore_merged_df <- serum_alb_final_zscore %>% + dplyr::full_join(serum_ast_final_zscore, by = "STUDYID") %>% + dplyr::full_join(serum_alp_final_zscore, by = "STUDYID") %>% + dplyr::full_join(serum_alt_final_zscore, by = "STUDYID") %>% + dplyr::full_join(serum_bili_final_zscore, by = "STUDYID") %>% + dplyr::full_join(serum_ggt_final_zscore, by = "STUDYID") + + + # Replace Inf, -Inf, and NaN with NA in the selected columns + selected_cols <- c("avg_alb_zscore", "avg_ast_zscore", "avg_alp_zscore", "avg_alt_zscore", "avg_bili_zscore", "avg_ggt_zscore") + LB_zscore_merged_df[selected_cols] <- lapply(LB_zscore_merged_df[selected_cols], function(x) replace(x, is.infinite(x) | is.nan(x), NA)) + + # add the LB_zscore_merged_df to master_LB_list + + ## LB_zscore_merged_df + +master_LB_list <- data.frame(STUDYID = NA, avg_alb_zscore = NA, avg_ast_zscore = NA, avg_alp_zscore = NA, + avg_alt_zscore = NA, avg_bili_zscore = NA, avg_ggt_zscore = NA) +## # Add LB_zscore_merged_df to master dataframe + master_LB_list <- dplyr::bind_rows(master_LB_list, LB_zscore_merged_df) + +## # Calculate the average for each row, ignoring NA values + LB_zscore_merged_df$avg_all_LB_zscores <- rowMeans(LB_zscore_merged_df[selected_cols], na.rm = TRUE) + +## # select the specific columns for calculation + LB_all_liver_zscore_averaged <- LB_zscore_merged_df %>% dplyr::select (STUDYID, avg_all_LB_zscores) + ## LB_all_liver_zscore_averaged + + +## # Assigning the new variables +## + LB_final_score <- LB_all_liver_zscore_averaged + +## # Append the LB_zscore to the "FOUR_Liver_Score" data frame +## # Create "LB_df" for FOUR_Liver_Score +## LB_df <- LB_final_score %>% rename(LB_score = avg_all_LB_zscores) + +## # Extract the LB_score value for the current STUDYID from LB_df +## calculated_LB_value <- LB_df$LB_score[LB_df$STUDYID == unique(ts$STUDYID)] + +## # Update the LB_score value in FOUR_Liver_Score for the current STUDYID +## FOUR_Liver_Score$LB_score[FOUR_Liver_Score$STUDYID == unique(ts$STUDYID)] <- calculated_LB_value + +## # Score the LB_score values in the FOUR_Liver_Score data frame and fill "scored_LBScore" column +## +score_final <- LB_all_liver_zscore_averaged$avg_all_LB_zscores + LB_final_score$zscore <- ifelse(score_final >= 3, 3, + ifelse(score_final >= 2, 2, + ifelse(score_final >= 1, 1, 0))) +## FOUR_Liver_Score + + +} diff --git a/R/get_mi_score.R b/R/get_mi_score.R new file mode 100644 index 0000000..fd12c95 --- /dev/null +++ b/R/get_mi_score.R @@ -0,0 +1,401 @@ + +#' @title get MI score for a given studyid +#' @param studyid Mandatory, character \cr +#' Studyid number +#' @param path_db Mandatory, character \cr +#' path of database +#' @return score +#' +#' @examples +#' \dontrun{ +#' get_mi_score(studyid='1234123', path_db='path/to/database.db') +#' } +#' @export + +get_mi_score <- function(studyid, path_db) { +studyid <- as.character(studyid) +path <- path_db + con <- DBI::dbConnect(DBI::dbDriver('SQLite'), dbname = path) + mi <- DBI::dbGetQuery(con, statement = "SELECT * FROM MI WHERE STUDYID = (:x)", + params = list(x=studyid)) + # Initialize the MI_final_score DATA FRAME + MI_final_score <- data.frame( STUDYID = unique(mi$STUDYID), avg_MI_score = NA ) + + #Make Data Frame to hold MI Information for the STUDY available in combined_mi for repeat dose + MIData <- data.frame("USUBJID" = NA,"MISTRESC" = NA,"MISEV" = NA, + "MISPEC" = NA) + + # Filter the data for the current STUDYID + mi_study_data <- mi + + #Pull all of the relevant MI Data using Grepl + MBD <- mi_study_data[grepl("LIVER", mi_study_data$MISPEC, ignore.case = TRUE), + c("USUBJID", "MISTRESC","MISEV","MISPEC")] + #Add to CompileData + MIData <- rbind(MIData, MBD) + + # Convert empty strings to NA in the MISEV column + MIData$MISEV[MIData$MISEV == ""] <- NA + + #MAKE NA Sev's a 0 + MIData$MISEV <- MIData$MISEV %>% tidyr::replace_na("0") + MIData <- stats::na.omit(MIData) + + MIData$MISTRESC <- toupper(MIData$MISTRESC) + + # # Remove the "Normal" values from the "MISTRESC" column(Subset MIData to remove rows where MISTRESC is "Normal") + # NORMAL_DATA <- MIData[MIData$MISTRESC == "NORMAL", ] # get the rows having value "Normal" + # + # MIData <- MIData[MIData$MISTRESC != "NORMAL", ] + + #Convert Severity + # Replacing various patterns in MISEV with numeric strings + + MIData$MISEV <- stringr::str_replace_all(MIData$MISEV, "\\b1\\s*OF\\s*4\\b", "2") + MIData$MISEV <- stringr::str_replace_all(MIData$MISEV, "\\b2\\s*OF\\s*4\\b", "3") + MIData$MISEV <- stringr::str_replace_all(MIData$MISEV, "\\b3\\s*OF\\s*4\\b", "4") + MIData$MISEV <- stringr::str_replace_all(MIData$MISEV, "\\b4\\s*OF\\s*4\\b", "5") + MIData$MISEV <- stringr::str_replace_all(MIData$MISEV, "1 OF 5", "1") + MIData$MISEV <- stringr::str_replace_all(MIData$MISEV, "MINIMAL", "1") + MIData$MISEV <- stringr::str_replace_all(MIData$MISEV, "2 OF 5", "2") + MIData$MISEV <- stringr::str_replace_all(MIData$MISEV, "MILD", "2") + MIData$MISEV <- stringr::str_replace_all(MIData$MISEV, "3 OF 5", "3") + MIData$MISEV <- stringr::str_replace_all(MIData$MISEV, "MODERATE", "3") + MIData$MISEV <- stringr::str_replace_all(MIData$MISEV, "4 OF 5", "4") + MIData$MISEV <- stringr::str_replace_all(MIData$MISEV, "MARKED", "4") + MIData$MISEV <- stringr::str_replace_all(MIData$MISEV, "5 OF 5", "5") + MIData$MISEV <- stringr::str_replace_all(MIData$MISEV, "SEVERE", "5") + + testing_MIData <- MIData + + # Converting MISEV to an ordered factor + MIData$MISEV <- ordered(MIData$MISEV, levels= c("0","1", "2", "3", "4","5")) + + # Replace NA values in MISEV with "0" + MIData$MISEV = MIData$MISEV %>% tidyr::replace_na("0") + + # Make all the MISPEC value = LIVER + # replace all the value to Liver which will replace "LIVER/GALLBLADDER" to "LIVER" + MIData$MISPEC <- "LIVER" # replace the "LIVER/GALLBLADDER" to "LIVER" + + #Combine Levels on Findings + MIData$MISTRESC <- as.factor(MIData$MISTRESC) + levels(MIData$MISTRESC)[levels(MIData$MISTRESC) == "CELL DEBRIS"] <- "CELLULAR DEBRIS" + levels(MIData$MISTRESC)[levels(MIData$MISTRESC) == "Infiltration, mixed cell"] <- "Infiltrate" + levels(MIData$MISTRESC)[levels(MIData$MISTRESC) == "Infiltration, mononuclear cell"] <- "Infiltrate" + levels(MIData$MISTRESC)[levels(MIData$MISTRESC) == "INFILTRATION, MONONUCLEAR CELL"] <- "Infiltrate" + levels(MIData$MISTRESC)[levels(MIData$MISTRESC) == "Fibrosis"] <- "Fibroplasia/Fibrosis" + + # Check any empty MISRESC column + empty_strings_count <- sum(MIData$MISTRESC == "") + ## print(paste("Number of empty strings in MISTRESC:", empty_strings_count)) + + # remove empty + MIData <- MIData[MIData$MISTRESC != '', ] # Remove rows with empty MISTRESC + #........................................................................................ + # Create a copy of MIData + MIData_copy <- MIData + + #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: + # Remove the "Recovery animals and tk animals from "MIData" + #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: + +master_CompileData <- get_compile_data(studyid = studyid, + path_db = path_db) + + # Filter the data frame + tk_recovery_less_MIData <- MIData %>% dplyr::filter (USUBJID %in% master_CompileData$USUBJID) + + # Perform a left join to match USUBJID and get ARMCD + tk_recovery_less_MIData_with_ARMCD <- tk_recovery_less_MIData %>% + dplyr::left_join(master_CompileData %>% dplyr::select(STUDYID, USUBJID, ARMCD, SETCD), by = "USUBJID") + + ########## MI Data ############### + MIData_cleaned <- tk_recovery_less_MIData_with_ARMCD + MIData_cleaned_copy <- MIData_cleaned + + # cat("MIData_cleaned : \n", toString(head(MIData_cleaned)), "\nDimensions:", + # paste(dim(MIData_cleaned), collapse = 'x'), "\n") # .............................................................. + + #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Merge Severity MI Data into Compile Data~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + MIIncidencePRIME <-MIData_cleaned[,c(1,2,4)] + + test_MIIncidencePRIME <- MIIncidencePRIME + + Severity <- merge(master_CompileData[,c("STUDYID","USUBJID","Species", "ARMCD")], MIData_cleaned) + + MIData_cleaned_SColmn <- MIData_cleaned %>% dplyr::select(USUBJID,MISTRESC,MISEV) + + MIData_cleaned_SColmn <- reshape2::dcast(MIData_cleaned, USUBJID ~ MISTRESC, value.var = "MISEV") + + MIData_cleaned_SColmn[is.na(MIData_cleaned_SColmn)] <- "0" #Fill NAs with Zero + + mi_CompileData <- merge(master_CompileData , MIData_cleaned_SColmn, by = "USUBJID") # Final & working mi_CompileData + + # Back-up data frame for checking purpose + final_working_compile_data_bef_normal <- mi_CompileData + + ## cat("mi_CompileData : \n", toString(head(MIData_cleaned)), "\nDimensions:", + ## paste(dim(mi_CompileData), collapse = 'x'), "\n") ### ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + + # Remove Normal MI Results + normalIndex <- which(colnames(mi_CompileData) == 'NORMAL') + if (length(normalIndex) > 0) { + mi_CompileData <- mi_CompileData[, -normalIndex] + } + + # Back-up data frame for checking purpose + final_working_compile_data_afer_normal <- mi_CompileData + + # cat("mi_CompileData : \n", toString(head(MIData_cleaned)), "\nDimensions:", + # paste(dim(mi_CompileData), collapse = 'x'), "\n") ### ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + # Check the data types of the columns before conversion + #str(mi_CompileData) + + #####????????????????????????? check the number~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + # Convert columns 7 to the last column of mi_CompileData to numeric + mi_CompileData[, 7:ncol(mi_CompileData)] <- sapply(mi_CompileData[, 7:ncol(mi_CompileData)], as.numeric) + + # Check the data types of the columns after conversion + #str(mi_CompileData) + + + #@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-------------------@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + print_MIIncidencePRIME <- MIIncidencePRIME + print_mi_CompileData <- mi_CompileData + + # Here Check the number of columns in mi_CompileData + if (ncol(mi_CompileData) > 6) { + #Calculate Incidence per group for MI Data + MIIncidencePRIME <- merge(MIIncidencePRIME, unique(mi_CompileData[,c("STUDYID","USUBJID","ARMCD")]), by = c("USUBJID")) + + # get the name of the columns of " MIIncidencePRIME" + column_MIIncidencePRIME <- data.frame(names(MIIncidencePRIME)) # column names of MIIncidencePRIME + + # Directly subset the data frame + MIIncidence <- MIIncidencePRIME[, c("STUDYID","USUBJID", "MISTRESC","ARMCD")] + + test_MIIncidence <- MIIncidence + + GroupIncid <- data.frame(Treatment = NA,Sex = NA,Finding = NA,Count = NA) + + # Iterate over each unique study + #for (Study in unique(MIIncidence$STUDYID)){ + + # Iterate over sex categories + for (sex in c('M','F')) { + # Filter data for the current study + StudyMI <- MIIncidence[which(MIIncidence$STUDYID==unique(MIIncidence$STUDYID)),] + #StudyMI <- MIIncidence + + StudyGroupIncid <- data.frame(Treatment = NA,Sex = NA,Finding = NA,Count = NA) + + # Filter data for the current sex + sexSubjects <- mi_CompileData$USUBJID[which(mi_CompileData$SEX == sex)] + sexIndex <- which(StudyMI$USUBJID %in% sexSubjects) + StudyMI <- StudyMI[sexIndex,] + + # Iterate over unique treatment arms (ARMCD) + for(dose in unique(StudyMI$ARMCD)){ + doseMI <- StudyMI[which(StudyMI$ARMCD == dose),] + + # Calculate the incidence for each finding + Incid <- data.frame(table(toupper(doseMI$MISTRESC))/length(unique(doseMI$USUBJID))) + + names(Incid)[2] <- "Count" + names(Incid)[1] <- "Finding" + Incid$Treatment <- paste0(unique(unique(StudyMI$STUDYID)), " ",dose) + Incid$Sex <- sex + + StudyGroupIncid <- rbind(StudyGroupIncid,Incid) + } + + #Removing of Vehicle Baseline + for (finding in unique(StudyGroupIncid$Finding)) { + findingIndex <- which(StudyGroupIncid$Finding == finding) + vehicleIndex <- grep('Vehicle', StudyGroupIncid$Treatment[findingIndex]) # VEHICLE FOR THE CURRENT FINDINGS..... + if (length(vehicleIndex) > 0) { + baseline <- StudyGroupIncid$Count[findingIndex][vehicleIndex] + StudyGroupIncid$Count[findingIndex] <- StudyGroupIncid$Count[findingIndex] - baseline + } + } + negativeIndex <- which(StudyGroupIncid$Count < 0) # when findings in HD group less than the vehicle group + if (length(negativeIndex) > 0) { + StudyGroupIncid$Count[negativeIndex] <- 0 + } + # Combine results + GroupIncid <- rbind(GroupIncid, StudyGroupIncid) + } + #} + + removeIndex <- which(is.na(GroupIncid$Treatment)) + if (length(removeIndex) > 0) { + GroupIncid <- GroupIncid[-removeIndex,] + } + + MIIncidence <- GroupIncid + + # cat("MIIncidence : \n", toString(head(MIData_cleaned)), "\nDimensions:", + # paste(dim(MIIncidence), collapse = 'x'), "\n") #...................... + + #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + #~~~~~~~~~~~~~~~~~~~~~~~~Create a copy of mi_CompileData named mi_CompileData2 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + # Create a copy of mi_CompileData named mi_CompileData2 + mi_CompileData2 <- mi_CompileData #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + # Severity calculation and recalculation......................................................................... + # Adjustment of the severity score based on the Incidence score ................................................. + + # Initialize ScoredData with the first 6 columns of "mi_CompileData2" + ScoredData <- mi_CompileData2[,1:6] + + # Initialize a counter for incidence overrides + IncidenceOverideCount <- 0 + + # Define column range for MI Data (from the 6th to the last column of mi_CompileData2) + colIndex <- seq(7, ncol(mi_CompileData2)) + + # Iterate over each column for scoring and adjustments + for (i in colIndex){ + colName <- colnames(mi_CompileData2)[i] + ScoredData[[colName]] <- NA + + #Score Severity # changing the current severity value in MISEV column??????????? + # Score Severity based on mi_CompileData2 # + + x <- ifelse(mi_CompileData2[,i] == 5, 5, + ifelse(mi_CompileData2[,i] > 3, 3, + ifelse(mi_CompileData2[,i] == 3, 2, + ifelse(mi_CompileData2[,i] > 0, 1, 0)))) + + # x <- ifelse(mi_CompileData2[,i]>3,3, + # ifelse(mi_CompileData2[,i]==3,2, + # ifelse(mi_CompileData2[,i]>0,1,0))) + + ScoredData[,colName] <-x + + # Update mi_CompileData2 with the values from ScoredData for the current column + mi_CompileData2[,colName] <- x + + #Check the Incidence percentage for each group + for (sex in c('M','F')) { + #studyDataStudyIndex <- which(mi_CompileData2$STUDYID == Study) + studyDataStudyIndex <- which(mi_CompileData2$STUDYID == unique(ScoredData$STUDYID)) + studyDataSexIndex <- which(mi_CompileData2$SEX == sex) + studyDataIndex <- intersect(studyDataStudyIndex, studyDataSexIndex) + StudyData <- mi_CompileData2[studyDataIndex,] + + #MIIncidStudyIndex <- grep(Study, MIIncidence$Treatment) + MIIncidStudyIndex <- grep(unique(ScoredData$STUDYID), MIIncidence$Treatment) + MIIncidSexIndex <- which(MIIncidence$Sex == sex) + MIIncidIndex <- intersect(MIIncidStudyIndex, MIIncidSexIndex) + MIIncidStudy <- MIIncidence[MIIncidIndex,] + + for (Dose2 in unique(StudyData$ARMCD)){ + DoseSevIndex <- which(StudyData$ARMCD == Dose2) + DoseSev <- StudyData[DoseSevIndex,] + DoseIncid <- MIIncidStudy[which(stringr::word(MIIncidStudy$Treatment, -1) == Dose2),] + if (colName %in% DoseIncid$Finding) { + findingIndex <- which(DoseIncid$Finding == colName) + + Incid <- DoseIncid$Count[findingIndex] + Incid <- ifelse(Incid >= 0.75, 5, + ifelse(Incid >= 0.5, 3, + ifelse(Incid >= 0.25, 2, + ifelse(Incid >= 0.1, 1, 0)))) + + # Incid <- ifelse(Incid>=0.5,3, + # ifelse(Incid>=0.25,2, + # ifelse(Incid>=0.1,1,0))) + swapIndex <- which(DoseSev[[colName]] < Incid & DoseSev[[colName]] > 0) + if (length(swapIndex) > 0) { + DoseSev[swapIndex, colName] <- Incid + ScoredData[studyDataIndex[DoseSevIndex], colName] <- DoseSev[, colName] + IncidenceOverideCount <- IncidenceOverideCount + 1 + } + + } + } + } + } + + # subset the ScoredData + ScoredData_subset_HD <- ScoredData %>% dplyr::filter (ARMCD == "HD") + + # Convert columns from 7th to the last to numeric + ScoredData_subset_HD[, 7:ncol(ScoredData_subset_HD)] <- lapply( + ScoredData_subset_HD[, 7:ncol(ScoredData_subset_HD)], + function(x) as.numeric(as.character(x)) + ) + + # Calculate the highest score for each row from the 7th to the last column + + # Check the number of columns + num_cols_ScoredData_subset_HD <- ncol(ScoredData_subset_HD) + + # If number of columns is 7, assign highest_score as the value of the 7th column + if (num_cols_ScoredData_subset_HD == 7) { + ScoredData_subset_HD$highest_score <- ScoredData_subset_HD[, 7] + } else { + # If number of columns is more than 7, get the max value from column 7 to the end + #ScoredData_subset_HD$highest_score <- apply(ScoredData_subset_HD[, 7:ncol(ScoredData_subset_HD)], 1, max, na.rm = TRUE) + ScoredData_subset_HD$highest_score <- matrixStats::rowMaxs(as.matrix(ScoredData_subset_HD[, 7:ncol(ScoredData_subset_HD)]), na.rm = TRUE) + } + + # Move the highest_score column to be the third column + ScoredData_subset_HD <- ScoredData_subset_HD[, c(1:2, ncol(ScoredData_subset_HD), 3:(ncol(ScoredData_subset_HD)-1))] + + + # averaged zscore per STUDYID for 'MI'.................................................................................. + + # Step 1: Filter for HD + #MI_final_score <- ScoredData_subset_HD [ARMCD == "HD"] + MI_final_score <- ScoredData_subset_HD %>% dplyr::filter(ARMCD == "HD") + + # Step 2: Convert highest_score to numeric # FACTOR value to numeric......????????? + MI_final_score <- MI_final_score %>% dplyr::mutate(highest_score = as.numeric(highest_score)) + + # Step 3: Group by STUDYID + MI_final_score <- MI_final_score %>% dplyr::group_by(STUDYID) + + # Step 4: Average MI_score + MI_final_score <- MI_final_score %>% dplyr::summarise( avg_MI_score = mean(highest_score, na.rm = TRUE), ) + + # Step 5: final column selection + MI_final_score <- MI_final_score %>% dplyr::select(STUDYID, avg_MI_score) + + + MI_df <- MI_final_score %>% dplyr::rename(MI_score = avg_MI_score) + + # Extract the MI_score value for the current STUDYID from MI_df + calculated_MI_value <- MI_df$MI_score[MI_df$STUDYID == unique(mi$STUDYID)] + + + } else { + # Create MI_final_score data frame with STUDYID and avg_MI_score + # avg_MI_score is set to 0 and STUDYID values are unique from mi$STUDYID + MI_final_score <- data.frame( + STUDYID = unique(mi$STUDYID), + avg_MI_score = NA + ) + + # Append the "MI_score" to the "FOUR_Liver_Score" data frame + MI_df <- MI_final_score %>% dplyr::rename(MI_score = avg_MI_score) + + # Extract the MI_score value for the current STUDYID from MI_df + calculated_MI_value <- MI_df$MI_score[MI_df$STUDYID == unique(mi$STUDYID)] + + } + + calculated_MI_value + + +} diff --git a/R/get_treatment_group.R b/R/get_treatment_group.R new file mode 100644 index 0000000..918caaf --- /dev/null +++ b/R/get_treatment_group.R @@ -0,0 +1,178 @@ +## This code is for getting treatment group, recovery group and TK group + +## ----------------------------------------------------------------------------- +## Date Programmer +## ---------- -------------------------------------------------------------- +## Feb-15-2024 Md Yousuf Ali (md.ali@fda.hhs.gov) + + +#' @title get treatment group +#' @param ind Mandatory, character or vector \cr +#' Studies number +#' @return list +#' +#' @examples +#' \dontrun{ +#' get_treatment_group(studies = '12345678', db_path = 'path/to/sqllite/database.db') +#' } +#' @export + + + +get_treatment_group <- function(studies=NULL, db_path) { + list_return <- list() + four <- c() + con <- DBI::dbConnect(DBI::dbDriver('SQLite'), dbname = db_path) + if (is.null(studies)){ + query <- 'SELECT * FROM ID' + appid <- DBI::dbGetQuery(conn=con, statement = query) + studies <- appid[['STUDYID']] + } else { + studies <- studies + } + + ## } + for (i in 1:length(studies)) { + study <- studies[i] + print(study) + tx <- DBI::dbGetQuery(conn = con, + statement = 'SELECT STUDYID,SETCD,TXPARMCD,TXVAL FROM TX WHERE STUDYID IN (:x)', + params=list(x=study)) + tx <- data.table::as.data.table(tx) + ts <- DBI::dbGetQuery(conn=con, + statement = "SELECT STUDYID,TSPARMCD,TSVAL FROM TS WHERE STUDYID = (:x)", + params = list(x=study)) + ts <- data.table::as.data.table(ts) + ds <- DBI::dbGetQuery(conn=con, + statement = "SELECT STUDYID, USUBJID, DSDECOD FROM DS WHERE STUDYID = (:x)", + params = list(x=study)) + ds <- data.table::as.data.table(ds) + dm <- DBI::dbGetQuery(conn=con, + statement = "SELECT STUDYID, USUBJID, SETCD FROM DM WHERE STUDYID = (:x)", + params = list(x=study)) + + dm <- data.table::as.data.table(dm) + pc <- DBI::dbGetQuery(conn=con, + statement = "SELECT STUDYID, USUBJID, POOLID FROM PC WHERE STUDYID = (:x)", + params = list(x=study)) + pc <- data.table::as.data.table(pc) + + pooldef <- DBI::dbGetQuery(conn=con, + statement = "SELECT STUDYID, USUBJID, POOLID FROM POOLDEF WHERE STUDYID = (:x)", + params = list(x=study)) + + pooldef <- data.table::as.data.table(pooldef) + + ## tabl <- c('tx','ts','ds','dm','pc','pooldef') + + number_of_setcd <- unique(dm[['SETCD']]) + print(number_of_setcd) + st_species <- ts[TSPARMCD=='SPECIES'][, TSVAL] + + list_return[[study]][['species']] <- st_species + + list_return[[study]][['setcd']] <- number_of_setcd + recv_group <- c() + trtm_group <- c() +if(length(st_species)!= 0) { + if(st_species =="RAT") { + # see if tkdesc in txparmcd + parmcd <- unique(tx[['TXPARMCD']]) + if('TKDESC' %in% parmcd){ + tkdesc_in_parmcd <- TRUE + } else { + + tkdesc_in_parmcd <- FALSE + } + ## tkdesc_in_parmcd + if(tkdesc_in_parmcd) { + + unq_tkdesc <- unique(tx[TXPARMCD=='TKDESC',TXVAL]) + if (length(unq_tkdesc) > 0) { + if('TK' %in% unq_tkdesc) { + tk_group <- unique(tx[TXPARMCD=='TKDESC' & TXVAL=='TK', SETCD]) + ## print('tkin parmcd') + ## print(tk) + } + not_tk <- number_of_setcd[which(!number_of_setcd %in% tk_group)] + } else { + not_tk <- number_of_setcd + } + } else { + tk_group <- c() + for(i in 1:length(number_of_setcd)){ + set_cd <- number_of_setcd[i] + subjid <- unique(dm[SETCD==set_cd, USUBJID]) + + if(pc$USUBJID[1]!='') { + uniq_pc_subj <- unique(pc$USUBJID) + pc_sub <- 'not_empty' + } else { + uniq_pool <- unique(pc$POOLID) + ## pooldef <- df_domain$pooldef + pool_sub <- pooldef[POOLID %in% uniq_pool, USUBJID] + pc_sub <- 'empty' + } + + if(pc_sub=='not_empty'){ + if(any(subjid %in% uniq_pc_subj)){ + ## print(paste0(set_cd, ' : in TK')) + tk_group <- c(tk_group, set_cd) + } + } else if (pc_sub=='empty'){ + if(any(subjid %in% pool_sub)){ + ## print(paste0(set_cd, ' : in TK and pool')) + tk_group <- c(tk_group, set_cd) + } + } + + } + not_tk <- number_of_setcd[which(!number_of_setcd %in% tk_group)] + } + ## number_of_setcd + + if(length(not_tk) > 0) { + for (i in 1:length(not_tk)){ + set_cd <- not_tk[i] + subjid <- unique(dm[SETCD==set_cd, USUBJID]) + dsdecod <- tolower(unique(ds[USUBJID %in% subjid, DSDECOD])) + if(tolower("RECOVERY SACRIFICE") %in% dsdecod) { + recv_group <- c(recv_group, set_cd) + } else if (tolower("TERMINAL SACRIFICE") %in% dsdecod){ + trtm_group <- c(trtm_group, set_cd) + } + } + } + + list_return[[study]][['TK_group']] <- tk_group + } else { + not_tk <- number_of_setcd + for (i in 1:length(not_tk)){ + set_cd <- not_tk[i] + subjid <- unique(dm[SETCD==set_cd, USUBJID]) + dsdecod <- tolower(unique(ds[USUBJID %in% subjid, DSDECOD])) + if(tolower("RECOVERY SACRIFICE") %in% dsdecod) { + ## print(paste0(set_cd, ' : in recovery')) + recv_group <- c(recv_group, set_cd) + } else if (tolower("TERMINAL SACRIFICE") %in% dsdecod){ + trtm_group <- c(trtm_group, set_cd) + } + } + } + } + + if( length(trtm_group) == 4) { + + four <- c(four,study) + ## print(four) + } + + print(trtm_group) + list_return[[study]][['treatment_group']] <- trtm_group + list_return[[study]][['recovery_group']] <- recv_group + } + +list_return[['four_trtm_group']] <- four + list_return +} + diff --git a/R/groupSEND.R b/R/groupSEND.R new file mode 100644 index 0000000..a958348 --- /dev/null +++ b/R/groupSEND.R @@ -0,0 +1,287 @@ +#' @title Merge demographic and treatment data for each of the SEND experimental results domains +#' @param dataset Mandatory, character\cr +#' dataset +#' +#' @param dmFields Mandatory, vector\cr +#' vector of variables +#' @param exFields Mandatory, vector\cr +#' vector of variables +#' @param exFields Mandatory, vector\cr +#' vector of variables +#' @return table +#' +#' @examples +#' \dontrun{ +#' groupSEND() +#' } + + +# Function to merge in demographic and treatment data for each of the SEND experimental results domains + +### IDEAS/COLUMNS/FUNCTIONS TO ADD ### +#1) Ordinal Dose Column +#2) Sort columns by logical order (maybe a separate function) +#3) Summary Statistics Output (definitely a separate function) +# - aimed at consistency checking +# (ex. is there a record in lb for each live animal at collection times) +# (are RELREC linked to real records) +#4) Can we reassemble SUPXX for too long records, etc.? +#5) Handle dose escalation study designs (maybe a separate function) +# - Test to see if selected study is appropriate for this function +#6) Pull in comments +#7) Deal with POOLID's +#8) Create Structured Comments in this script to explain what it's doing + + +groupSEND <- function(dataset,targetDomain,dmFields=c('SEX','ARMCD','SETCD','USUBJID', 'RFSTDTC'), + exFields=c('EXTRT','EXDOSE','EXDOSU'), + txParams=c('TRTDOS','TRTDOSU','TKDESC','GRPLBL','SPGRPCD')) { + +'%ni%' <- Negate('%in%') + # Check to ensure that dataset contains all required domains + requiredDomains <- c('dm','ex','tx','ta','ds') # alter the script to check for PP + for (domain in requiredDomains) { + if (domain %ni% names(dataset)) { + stop(paste0('SEND dataset does not contain required domains: ', domain)) + } + } + + # Get dataframe of domain of interest and identify subjects + groupedData <- dataset[[targetDomain]] + if (! is.factor(groupedData$USUBJID)) { + groupedData$USUBJID <- factor(groupedData$USUBJID) + } + subjects <- levels(groupedData$USUBJID) + subjects <- subjects[which(subjects!='')]#### Why is this needed for CL domain in PDS dataset? + + # Merge relevant fields from dm domain by subject (defaults: sex, trial arm, and trial set) + groupedData <- merge(groupedData,dataset$dm[,dmFields],by='USUBJID') + + # Merge relevant fields from the ex domain by subject (defaults: treatment, dose, and dose unit) + for (field in exFields) { + assign(field,NA) + } + count <- 0 + for (subject in subjects) { + count <- count + 1 + subjectIndex <- which(dataset$ex$USUBJID==subject) + for (field in exFields) { + tmp <- get(field) + uniqueFieldValues <- unique(dataset$ex[subjectIndex,field]) + if (is.factor(dataset$ex[[field]])) { + uniqueFieldValues <- levels(dataset$ex[[field]])[uniqueFieldValues] + } + if (length(uniqueFieldValues)>1) { + # NOTE: Fix this to handle multiple compounds administered to the same animal at different levels + tmp[count] <- paste(uniqueFieldValues,collapse="; ") + warning(paste('Multiple values recorded for',field)) + } else { + tmp[count] <- uniqueFieldValues + } + assign(field,tmp) + } + } + exData <- subjects + for (field in exFields) { + exData <- cbind(exData,get(field)) + } + exData <- as.data.frame(exData) + colnames(exData) <- c('USUBJID',exFields) + groupedData <- merge(groupedData,exData,by='USUBJID') + + # Merge relevant information from tx domain by set code (default: dose, dose unit, toxicokinetics description, group label, and sponsor-defined group label) + # (control treatment currently hard coded) + if (! is.factor(dataset$tx$SETCD)) { + dataset$tx$SETCD <- factor(dataset$tx$SETCD) + } + if (! is.factor(dataset$tx$SET)) { + dataset$tx$SET <- factor(dataset$tx$SET) + } + SETCD <- levels(dataset$tx$SETCD) + for (param in c('SET',txParams,'TCNTRL')) { + assign(param,NA) + } + txParamsFlag <- rep(FALSE,length(txParams)) + names(txParamsFlag) <- txParams + count <- 0 + for (set in SETCD) { + count <- count + 1 + setIndex <- which(dataset$tx$SETCD==set) + SET[count] <- levels(dataset$tx$SET)[unique(dataset$tx$SET[setIndex])][1] + if (length(levels(dataset$tx$SET)[unique(dataset$tx$SET[setIndex])])>1) { + warning('SET names do not match SETCD in TX Domain!') + } + for (param in txParams) { + if (param %in% dataset$tx$TXPARMCD) { + if (count==1) { + txParamsFlag[param] <- TRUE + } + tmp <- get(param) + txVal <- getFieldValue(dataset$tx,'TXVAL',c('SETCD','TXPARMCD'),c(set,param)) + if (length(txVal)==1) { + tmp[count] <- txVal + } else { + tmp[count] <- NA + } + assign(param,tmp) + if (param == 'TRTDOS') { + TRTDOS <- gsub(',', '', TRTDOS) + } + } + } + if ('TCNTRL' %in% dataset$tx$TXPARMCD) { + if (is.na(as.numeric(TRTDOS[count])) == TRUE){ + TCNTRL[count] <- NA + } else if (as.numeric(TRTDOS[count])==0) { + TCNTRL[count] <- getFieldValue(dataset$tx,'TXVAL',c('SETCD','TXPARMCD'),c(set,'TCNTRL')) + } else { + TCNTRL[count] <- NA + } + } else { + TCNTRL[count] <- NA + } + } + txData <- cbind(SETCD,SET) + for (param in txParams[txParamsFlag==T]) { + txData <- cbind(txData,get(param)) + } + txData <- cbind(txData,TCNTRL) + txData <- as.data.frame(txData) + colnames(txData) <- c('SETCD','SET',txParams[txParamsFlag==T],'TCNTRL') + groupedData <- merge(groupedData,txData,by='SETCD') + + # Check ifUSUBJID in PP --> TKSTATUS + TKcheck <- rep(NA,length(subjects)*2) + dim(TKcheck) <- c(length(subjects),2) + colnames(TKcheck) <- c('USUBJID','TKstatus') + TKcheck <- as.data.frame(TKcheck) + count <- 0 + for (subject in subjects) { + count <- count + 1 + TKcheck$USUBJID[count] <- subject + if (subject %in% dataset$pp$USUBJID) { + TKcheck$TKstatus[count] <- TRUE + } else { + TKcheck$TKstatus[count] <- FALSE + } + } + groupedData <- merge(groupedData,TKcheck,by='USUBJID') + # Merge recovery status, interim status and recovery start day from se domain (ELEMENT) by subject + if (!is.null(dataset$se)) { + seData <- rep(NA,length(subjects)*4) + dim(seData) <- c(length(subjects),4) + colnames(seData) <- c('USUBJID','RecoveryStatus','InterimStatus', 'RecoveryStartDY') + seData <- as.data.frame(seData) + seData$USUBJID <- subjects + count <- 0 + for (subject in subjects) { + count <- count + 1 + dmIndex <- which(dataset$dm$USUBJID==subject) + subjectIndex <- which(dataset$se$USUBJID==subject) + if (length(seInd <- grep('recovery',dataset$se$ELEMENT[subjectIndex],ignore.case=TRUE))>0) { + seData$RecoveryStatus[count] <- TRUE + sestdtc <- dataset$se$SESTDTC[subjectIndex][seInd] + seData$InterimStatus[count] <- FALSE + seData$RecoveryStartDY[count] <- difftime(as.Date(paste0('',sestdtc)),as.Date(dataset$dm$RFSTDTC[dmIndex]), units = 'days') + 1 + } else if (length(seInd <- grep('recovery',dataset$se$SEUPDES[subjectIndex],ignore.case=TRUE))>0) { + seData$RecoveryStatus[count] <- TRUE + sestdtc <- dataset$se$SESTDTC[subjectIndex][seInd] + seData$InterimStatus[count] <- FALSE + seData$RecoveryStartDY[count] <- difftime(as.Date(paste0('',sestdtc)),as.Date(dataset$dm$RFSTDTC[dmIndex]), units = 'days') + 1 + } else if (length(grep('interim',dataset$se$ELEMENT[subjectIndex],ignore.case=TRUE))>0) { + seData$RecoveryStatus[count] <- FALSE + seData$InterimStatus[count] <- TRUE + seData$RecoveryStartDY[count] <- NA + } else { + seData$RecoveryStatus[count] <- FALSE + seData$InterimStatus[count] <- FALSE + seData$RecoveryStartDY[count] <- NA + } + } + groupedData <- merge(groupedData,seData,by='USUBJID') + } + + # Merge disposition description + dsIndex <- which(dataset$ds$USUBJID %in% subjects) + if (! is.factor(dataset$ds$DSDECOD)) { + dataset$ds$DSDECOD <- factor(dataset$ds$DSDECOD) + } + DSDECOD <- levels(dataset$ds$DSDECOD)[dataset$ds$DSDECOD] + DSDECOD <- DSDECOD[dsIndex] + dsData <- cbind(subjects,DSDECOD,DSDECOD) + colnames(dsData) <- c('USUBJID','DSDECOD','Disposition') + groupedData <- merge(groupedData,dsData,by='USUBJID') + + # Clean up the dataframe + + # Rename SEX + groupedData$Sex <- groupedData$SEX + + # Define Treatment + if ('TCNTRL' %in% colnames(groupedData)) { + levels(groupedData$EXTRT) <- c(levels(groupedData$EXTRT),levels(groupedData$TCNTRL)) + tcntrlIndex <- which(!is.na(groupedData$TCNTRL)) + groupedData$EXTRT[tcntrlIndex] <- groupedData$TCNTRL[tcntrlIndex] + } + groupedData$Treatment <- groupedData$EXTRT + dropColumns <- 'TCNTRL' + + # Check for dose discrepancy + if (is.factor(groupedData$EXDOSE)) { + if (! FALSE %in% is.finite(as.numeric(levels(groupedData$EXDOSE)[groupedData$EXDOSE]))) { + groupedData$EXDOSE <- as.numeric(levels(groupedData$EXDOSE)[groupedData$EXDOSE]) + } else { + groupedData$EXDOSE <- as.character(levels(groupedData$EXDOSE)[groupedData$EXDOSE]) + } + } + if (is.factor(groupedData$TRTDOS)) { + if (! FALSE %in% is.finite(as.numeric(levels(groupedData$TRTDOS)[groupedData$TRTDOS]))) { + groupedData$TRTDOS <- as.numeric(levels(groupedData$TRTDOS)[groupedData$TRTDOS]) + } else { + groupedData$TRTDOS <- as.character(levels(groupedData$TRTDOS)[groupedData$TRTDOS]) + } + } + if (! FALSE %in% (groupedData$EXDOSE==groupedData$TRTDOS)) { + dropColumns <- c(dropColumns,'TRTDOS') + } + groupedData$DoseN <- groupedData$EXDOSE + + # Check for dose unit discrepancy + if (length(levels(groupedData$EXDOSU)==length(levels(groupedData$TRTDOSU)))) { + if (length(levels(groupedData$EXDOSU))==1) { + if (levels(groupedData$EXDOSU)==levels(groupedData$TRTDOSU)) { + dropColumns <- c(dropColumns,'TRTDOSU') + } + } else { + if (! FALSE %in% sort(levels(groupedData$EXDOSU))==sort(levels(groupedData$TRTDOSU))) { + if (! FALSE %in% (groupedData$EXDOSU==groupedData$TRTDOSU)) { + dropColumns <- c(dropColumns,'TRTDOSU') + } + } + } + } + groupedData$DoseUnit <- groupedData$EXDOSU + + # Create concatenated dose with units + groupedData$Dose <- paste(groupedData$DoseN,groupedData$DoseUnit) + groupedData$TreatmentDose <- paste(groupedData$Treatment,groupedData$Dose) + dropColumns <- c(dropColumns,'DoseN','DoseUnit') + + # Define TK + if ('TKDESC' %in% colnames(groupedData)) { + noTKindex <- grep('no',groupedData$TKDESC,ignore.case=T) + groupedData$TKstatus[noTKindex] <- FALSE + groupedData$TKstatus[-noTKindex] <- TRUE + dropColumns <- c(dropColumns,'TKDESC') + } + # drop useless columns + dropIndex <- which(! colnames(groupedData) %in% dropColumns) + groupedData <- groupedData[,dropIndex] + + # reorder columns + columns2move <- c('SET','Treatment','TreatmentDose','Dose','Sex','RecoveryStatus','InterimStatus','RecoveryStartDY','Disposition','TKstatus') + columnsNOmove <- which(! colnames(groupedData) %in% columns2move) + groupedData <- cbind(groupedData[,(colnames(groupedData) %in% columns2move)],groupedData[,columnsNOmove]) + + return(groupedData) +} diff --git a/R/makeBWPlot.R b/R/makeBWPlot.R new file mode 100644 index 0000000..a7f8aa5 --- /dev/null +++ b/R/makeBWPlot.R @@ -0,0 +1,122 @@ +#Output BW plots for Cross-Study Analysis for +#in CrossStudyGraph_Combined.R or CrossStudyVisualizationApp.R + +#Requires BWMethod and BWMetric to be supplied from possibilities: +#BW Method: TERMBW or BW +#BW Metric: zScore or PercentChange + +#Requires Dose and Gender + +makeBWplot <- function(BodyWeight,BWMethod, BWMetric, Dose, Gender){ + + + if (BWMethod == "BW"){ + if (BWMetric == 'zScore'){ + BWplotData <- BodyWeight + BWplotData$Species <- word(BodyWeight$StudyID,1) + BWplotData$BWzScore <- NA + BWplotData$zScoreModel <- NA + for (study in unique(BWplotData$StudyID)){ + StudyWeight <- BWplotData[which(BWplotData$StudyID == study),] + Model <- lm(BWSTRESN ~ VISITDY, data = StudyWeight) #Model per Study + cIndex <- which(StudyWeight$ARMCD == 'Vehicle') + stdyidx <- which(BWplotData$StudyID %in% study) + for (day in unique(StudyWeight$VISITDY)){ + DayWeight <- StudyWeight[which(StudyWeight$VISITDY == day),] + DYidx <- which(BWplotData$StudyID %in% study & BWplotData$VISITDY == day) + ControlAnimals <- DayWeight[which(DayWeight$ARMCD == 'Vehicle'),] + ControlMean <- mean(as.numeric(ControlAnimals$BWSub), na.rm = TRUE) + ControlSD <- sd(as.numeric(ControlAnimals$BWSTRESN), na.rm = TRUE) + BW.sd.c <- sd(Model$residuals[cIndex]) + BWplotData$BWzScore[DYidx] <- (BWplotData$BWSub[DYidx] - ControlMean)/ControlSD + BWplotData$zScoreModel[DYidx] <- (BWplotData$BWSub[DYidx] - ControlMean)/BW.sd.c + } + } + + } else if (BWMetric == "PercentChange"){ + BWplotData <- BodyWeight + BWplotData$Species <- word(BodyWeight$StudyID,1) + for (study in unique(BWplotData$StudyID)){ + StudyWeight <- BWplotData[which(BWplotData$StudyID == study),] + stdyidx <- which(BWplotData$StudyID %in% study) + for (day in unique(StudyWeight$VISITDY)){ + DayWeight <- StudyWeight[which(StudyWeight$VISITDY == day),] + DYidx <- which(BWplotData$StudyID %in% study & BWplotData$VISITDY == day) + ControlAnimals <- DayWeight[which(DayWeight$ARMCD == 'Vehicle'),] + BaselineControlMean <- mean(ControlAnimals$BaselinePercentChange, na.rm = TRUE) + BWplotData$BaselinePercentChange[DYidx] <- BWplotData$BaselinePercentChange[DYidx] - BaselineControlMean + } + } + } + } + if (BWMethod == "TERMBW"){ + if (BWMetric == 'zScore'){ + BWplotData <- BodyWeight + BWplotData$BWzScore <- NA + for (study in unique(BWplotData$StudyID)){ + stdyidx <- which(BWplotData$StudyID %in% study) + Cntrolanimals <- BWplotData[which(BWplotData$ARMCD == "Vehicle" & BWplotData$StudyID %in% study),] + CntrolBaselinemean <- mean(Cntrolanimals$BWSub, na.rm = TRUE) + CntrolBaseSD <- sd(Cntrolanimals$BWSTRESN, na.rm = TRUE) + BWplotData$BWzScore[stdyidx] <- (BWplotData$BWSub[stdyidx] - CntrolBaselinemean )/CntrolBaseSD + } + } + if (BWMetric == 'PercentChange'){ + BWplotData <- BodyWeight + BWplotData$BaselinePercentChange <- NA + for (study in unique(BWplotData$StudyID)){ + stdyidx <- which(BWplotData$StudyID %in% study) + Cntrolanimals <- BWplotData[which(BWplotData$ARMCD == "Vehicle" & BWplotData$StudyID %in% study),] + CntrolBaselinemean <- mean(Cntrolanimals$BWSTRESN, na.rm = TRUE) + BWplotData$BaselinePercentChange[stdyidx] <- BWplotData$BWSub[stdyidx]/CntrolBaselinemean*100 + } + } + } + #BW Plots + BWplotData$Compound <- word(BWplotData$StudyID,2) + BWplotData <- BWplotData[which(BWplotData$ARMCD == Dose),] + + if (BWMethod == "BW"){ + if (BWMetric == 'zScore') { + BWplotData <- aggregate(zScoreModel ~ VISITDY+ Species + ARMCD+Compound, FUN = mean, data = BWplotData) + q <- ggplot(BWplotData, aes(x = VISITDY, y = zScoreModel, color = Compound, shape = Species))+ + geom_point() + geom_line() + ylab(paste0(BWMetric, " of Weight")) + + scale_color_manual(values=c(rgb(0.8,0.2,0.5,0.9),rgb(0.2,0.5,0.5,0.9), rgb(0.3,0.7,0.9,0.9), rgb(0.1,0.2,0.3,0.9), rgb(0.1,0.8,0.5,0.9))) + + scale_x_continuous(breaks = round(seq(min(BWplotData$VISITDY), max(BWplotData$VISITDY), by = 5)))+ + ggtitle(paste0("Baseline Subtracted BW - ", Dose, " ", Gender)) + return (q) + } else { + BWplotData <- aggregate(BaselinePercentChange ~ VISITDY+ Species + ARMCD+Compound, FUN = mean, data = BWplotData) + q <- ggplot(BWplotData, aes(x = VISITDY, y = BaselinePercentChange, color = Compound, shape = Species))+ + geom_point() + geom_line() + ylab(paste0(BWMetric, " of Weight")) + + scale_color_manual(values=c(rgb(0.8,0.2,0.5,0.9),rgb(0.2,0.5,0.5,0.9), rgb(0.3,0.7,0.9,0.9), rgb(0.1,0.2,0.3,0.9), rgb(0.1,0.8,0.5,0.9))) + + scale_x_continuous(breaks = round(seq(min(BWplotData$VISITDY), max(BWplotData$VISITDY), by = 5)))+ + ggtitle(paste0("Baseline Subtracted BW - ", Dose, " ", Gender)) + return (q) + } + } else { + #TermBW + if (BWMetric == 'zScore'){ + BWplotData <- aggregate(BWzScore ~ Species + ARMCD+Compound, FUN = mean, data = BWplotData) + q <- ggplot(BWplotData, aes(x = Species, y = BWzScore, fill = Compound, shape = Species)) + + guides(colour = guide_legend(override.aes = list(shape = NA))) + + geom_col(position = 'dodge2') + ylab(paste0(BWMetric, " of Weight")) + + ggtitle(paste0("TermBW - ", Dose, " ", Gender)) + + scale_fill_manual(values = c(rgb(0.8,0.2,0.5,0.9),rgb(0.2,0.5,0.5,0.9), rgb(0.3,0.7,0.9,0.9), rgb(0.1,0.2,0.3,0.9), rgb(0.1,0.8,0.5,0.9))) + + theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) + return (q) + + } else { + BWplotData <- aggregate(BaselinePercentChange ~ Species + ARMCD + Compound, FUN = mean, data = BWplotData) + q <- ggplot(BWplotData, aes(x = Species, y = BaselinePercentChange, fill = Compound, shape = Species)) + + guides(colour = guide_legend(override.aes = list(shape = NA))) + + geom_col(position = 'dodge2') + ylab(paste0(BWMetric, " of Weight")) + + ggtitle(paste0("TermBW - ", Dose, " ", Gender)) + + scale_fill_manual(values = c(rgb(0.8,0.2,0.5,0.9),rgb(0.2,0.5,0.5,0.9), rgb(0.3,0.7,0.9,0.9), rgb(0.1,0.2,0.3,0.9), rgb(0.1,0.8,0.5,0.9))) + + theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) + return (q) + + } + } + +} diff --git a/R/makeBarPlot.R b/R/makeBarPlot.R new file mode 100644 index 0000000..7b94277 --- /dev/null +++ b/R/makeBarPlot.R @@ -0,0 +1,187 @@ +#Code recycled from makeradar +#Change made 02/08/2024 "Gender" Parts all commented out/removed as it was not necessary for the bar plot + +#Output Radar plot for Cross-Study Analysis for organSystem or all defined +#in CrossStudyGraph_Combined.R or CrossStudyVisualizationApp.R + +#Gender must be restricted for each plot to either M or F or Combined + +#Current organSystem options: ALL, SUMMARY, REPRODUCTIVE, LIVER, KIDNEY, HEMATOPOIETIC, +#ENDOCRINE and BW + +makeBarPlot <- function(summaryData, organSystem, testvar) { + + ##library(fmsb) + ##library(tidyr) + ##library(ggplot2) + ##library(plotly) + organSystem <- toupper(organSystem) + #Limit summaryData to desired Organ System + if (organSystem %in% c('ALL', 'SUMMARY')) + { + #Takes Summary Values which do not have '.' + Data <- summaryData[!grepl("\\.", rownames(summaryData)),] + Title <- "Summary" + a <- 0 + } else { + #Limits summaryData to desired organSystem for individual radar plots + Data <- summaryData[which(grepl(paste0(organSystem,"."),rownames(summaryData))),] + Title <- organSystem + a <- 1 + } + + #Limit to Gender Desired + #Gender <- toupper(Gender) + #Data <- Data[ ,which(grepl(Gender, colnames(Data)))] + + #Create better labeps + if (a == 0){ + + } else { + rownames(Data) <- gsub(paste0(organSystem,"."),"",rownames(Data)) + } + + #Format Data for RadarChart by adding min and max to dataset + Data <- t(Data) + Data <- rbind(rep(3,ncol(Data)),rep(0,ncol(Data)), Data) + Data <- as.data.frame(Data) + + #Create Group Names + GroupNames <-str_replace(rownames(Data)[3:nrow(Data)],"\\.", " ") + #Grab Num Species/Compounds from GroupNames + Species <- word(GroupNames,1) + Compounds <- substr(word(GroupNames,2),1, nchar(word(GroupNames,2))-2) + + #Set Colors for Radar Plot using Compounds + ColorOptions <- c(rgb(0.8,0.2,0.5,0.9),rgb(0.2,0.5,0.5,0.9),rgb(0.3,0.7,0.9,0.9), rgb(0.1,0.2,0.3,0.9), rgb(0.1,0.8,0.5,0.9)) + i <- 1 + for (Compound in unique(Compounds)){ + Compounds <- str_replace_all(Compounds,Compound, ColorOptions[i]) + i <- i+1 + } + colors_border <- Compounds + + #Set Shape for Radar using Species + shapes_line_options <- c('1','2','3','4') + shapes_point_options <- c('16','17','15','18') + legend_point_options <- c('20','17','15','18') + SpeciesFormat <- data.frame(shapes = Species, + points = Species, + legends = Species) + j <- 1 + for (animal in unique(Species)){ + SpeciesFormat$shapes <- str_replace_all(SpeciesFormat$shapes, animal, shapes_line_options[j]) + SpeciesFormat$points <- str_replace_all(SpeciesFormat$points, animal, shapes_line_options[j]) + SpeciesFormat$legends <- str_replace_all(SpeciesFormat$legends, animal, shapes_line_options[j]) + j <- j+1 + } + shapes_line <- as.numeric(SpeciesFormat$shapes) + shapes_point <- as.numeric(SpeciesFormat$points) + legend_point <- as.numeric(SpeciesFormat$legends) + + Data<-Data[-c(1,2),] + Data2<-Data + Data2["Species"]<-rownames(Data2) + Data2<-Data2 %>% pivot_longer(cols=1:ncol(Data), names_to = "Indicators", values_to = "Values") + + testvar<-testvar + #print("makeBarPlot") + #print(testvar) + + Data2$Indicators <- factor(Data2$Indicators, + levels= testvar) + + Data <- Data2 %>% + dplyr::arrange(Indicators) %>% na.omit() + + #saveRDS(Data, "intermediate.RDS") + + #Generate Bar plot + par(xpd= TRUE,mar = c(1,12,2,12), oma = c(1,12,2,12)) + #saveRDS(Data2,"Data2.RDS") + #b <- ggplot(Data2, aes( x = reorder(Indicators,-Values), y = Values, fill = Species )) + b <- ggplot(Data, aes( x = Indicators, y = Values, fill = Species )) + b<-b + geom_bar( position = "dodge", stat = "identity", alpha = .5 ) + b<-b + theme(axis.text.x=element_text(angle=45, hjust=1), plot.title = element_text(hjust = 0.5)) + barplot<- b + labs(title=NULL,x="Indicators") + barplotly<-ggplotly(barplot) + return(barplotly) +} + +displayIndic <- function(summaryData, organSystem) { + + ##library(fmsb) + ##library(tidyr) + ##library(ggplot2) + ##library(plotly) + organSystem <- toupper(organSystem) + #Limit summaryData to desired Organ System + if (organSystem %in% c('ALL', 'SUMMARY')) + { + #Takes Summary Values which do not have '.' + Data <- summaryData[!grepl("\\.", rownames(summaryData)),] + Title <- "Summary" + a <- 0 + } else { + #Limits summaryData to desired organSystem for individual radar plots + Data <- summaryData[which(grepl(paste0(organSystem,"."),rownames(summaryData))),] + Title <- organSystem + a <- 1 + } + + #Limit to Gender Desired + #Gender <- toupper(Gender) + #Data <- Data[ ,which(grepl(Gender, colnames(Data)))] + + #Create better labeps + if (a == 0){ + + } else { + rownames(Data) <- gsub(paste0(organSystem,"."),"",rownames(Data)) + } + + #Format Data for RadarChart by adding min and max to dataset + Data <- t(Data) + Data <- rbind(rep(3,ncol(Data)),rep(0,ncol(Data)), Data) + Data <- as.data.frame(Data) + + #Create Group Names + GroupNames <-str_replace(rownames(Data)[3:nrow(Data)],"\\.", " ") + #Grab Num Species/Compounds from GroupNames + Species <- word(GroupNames,1) + Compounds <- substr(word(GroupNames,2),1, nchar(word(GroupNames,2))-2) + + #Set Colors for Radar Plot using Compounds + ColorOptions <- c(rgb(0.8,0.2,0.5,0.9),rgb(0.2,0.5,0.5,0.9),rgb(0.3,0.7,0.9,0.9), rgb(0.1,0.2,0.3,0.9), rgb(0.1,0.8,0.5,0.9)) + i <- 1 + for (Compound in unique(Compounds)){ + Compounds <- str_replace_all(Compounds,Compound, ColorOptions[i]) + i <- i+1 + } + colors_border <- Compounds + + #Set Shape for Radar using Species + shapes_line_options <- c('1','2','3','4') + shapes_point_options <- c('16','17','15','18') + legend_point_options <- c('20','17','15','18') + SpeciesFormat <- data.frame(shapes = Species, + points = Species, + legends = Species) + j <- 1 + for (animal in unique(Species)){ + SpeciesFormat$shapes <- str_replace_all(SpeciesFormat$shapes, animal, shapes_line_options[j]) + SpeciesFormat$points <- str_replace_all(SpeciesFormat$points, animal, shapes_line_options[j]) + SpeciesFormat$legends <- str_replace_all(SpeciesFormat$legends, animal, shapes_line_options[j]) + j <- j+1 + } + shapes_line <- as.numeric(SpeciesFormat$shapes) + shapes_point <- as.numeric(SpeciesFormat$points) + legend_point <- as.numeric(SpeciesFormat$legends) + + Data<-Data[-c(1,2),] + Data2<-Data + Data2["Species"]<-rownames(Data2) + Data2<-Data2 %>% pivot_longer(cols=1:ncol(Data), names_to = "Indicators", values_to = "Values") + Data2 + +} diff --git a/R/makeFWPlot.R b/R/makeFWPlot.R new file mode 100644 index 0000000..605fd84 --- /dev/null +++ b/R/makeFWPlot.R @@ -0,0 +1,43 @@ +#Output FW plot Day Plot for Cross-Study Analysis for +#in CrossStudyGraph_Combined.R or CrossStudyVisualizationApp.R + +#Includes Variable to display as a Week or by Day Visualizations as Time + +#Requires Dose and Gender + +makeFWplot <- function(FWData, Time, Dose, Gender){ + + + #FW Plots + FWData <- FWData[which(FWData$ARMCD %in% Dose),] + FWData <- FWData[complete.cases(FWData),] + if (Time == 'Day'){ + #FW Mixed Species Graph + p <- ggplot(data = FWData, aes(x=FWDY, y=Diff, color = Compound, shape = Species)) + + ggtitle(paste0("Food Consumption - ", Dose, " ", Gender))+ + scale_color_manual(values=c(rgb(0.8,0.2,0.5,0.9),rgb(0.2,0.5,0.5,0.9),rgb(0.3,0.7,0.9,0.9), rgb(0.1,0.2,0.3,0.9), rgb(0.1,0.8,0.5,0.9))) + + scale_x_continuous(breaks = round(seq(min(FWData$FWDY), max(FWData$FWDY), by = 5)))+ + geom_point() +geom_line(linetype = "dashed")+ + ylab("Percent Food Consumption Relative to Control (g/animal/day)") +xlab("Day") + return(p) + } else { + #Group Data into 7 Day Ranges + FWData$Week <- floor(round(FWData$FWDY/7)) + FWData2 <- FWData + FWData2$Diff <- as.numeric(FWData2$Diff) + FWData2$Diff[is.na(FWData2$Diff)] <- 0 + FWData2 <- FWData2 %>% + group_by(Compound, Species, Week) %>% summarise(Diff = mean(Diff), na.rm = TRUE) + + pg <- ggplot(data = FWData2, aes(x=Week, y=Diff, color = Compound, shape = Species)) + + ggtitle(paste0("Food Consumption - ", Dose, " ", Gender))+ + scale_color_manual(values=c(rgb(0.8,0.2,0.5,0.9),rgb(0.2,0.5,0.5,0.9),rgb(0.3,0.7,0.9,0.9), rgb(0.1,0.2,0.3,0.9), rgb(0.1,0.8,0.5,0.9))) + + scale_x_continuous(breaks = round(seq(min(FWData$Week), max(FWData$Week), by = 1)))+ + geom_point() +geom_line(linetype = "dashed")+ + ylab("% Food Consumption Relative to Control (g/animal Averaged per Week)") +xlab("Week") + return(pg) + } + + +} + diff --git a/R/makeLBPlot.R b/R/makeLBPlot.R new file mode 100644 index 0000000..24c4be4 --- /dev/null +++ b/R/makeLBPlot.R @@ -0,0 +1,54 @@ +#Output LB plot for Cross-Study Analysis for organSystem or all defined +#in CrossStudyGraph_Combined.R or CrossStudyVisualizationApp.R + +#Gender must be restricted for each plot to either M or F or Combined + +#Dose must be specified; Vehicle/Control will be added for comparison + +#LBSPEC Method must be specified: WHOLE BLOOD, URINE or URINE + +#Current organSystem options: REPRODUCTIVE, LIVER, KIDNEY, HEMATOPOIETIC, and +#ENDOCRINE + +makeLBplot <- function(LBresults, OrganSystem, sources, Dose, Gender){ + + #Limit to Desired OrganSystem and Gender + LBData <- LBresults[[OrganSystem]][[Gender]] + #Convert Source to Test Group + if (sources == 'WHOLE BLOOD'){ + testgroup <- "Hematology" + } else if (sources == 'SERUM'){ + testgroup <- 'Clinical Chemistry' + } else if (sources == 'URINE'){ + testgroup <- 'Urinalysis' + } + + #Create LBplotData from LBData for source and aggregate + LBplotData <- LBData[which(LBData$LBSPEC == sources),] + LBplotData <- LBplotData[which(LBplotData$ARMCD == Dose),] + LBplotData$Species <- word(LBplotData$StudyID,1) + LBplotData$Compound <- word(LBplotData$StudyID, 2) + LBplotData$LBTESTCD <- factor(LBplotData$LBTESTCD) + LBplotData <- aggregate(zscore ~ StudyID + Compound + Species + LBTESTCD + ARMCD, FUN = mean, data = LBplotData) + #Remove Values that Do NOT have Data for all studies + completeData <- names(which(table(LBplotData$LBTESTCD) == length(unique(LBplotData$StudyID)))) + LBplotData <- LBplotData[which(LBplotData$LBTESTCD %in% completeData),] + #Set Maximum/Minimum to realistic values + LBplotData$zscore <- replace(LBplotData$zscore, LBplotData$zscore>4,4) + LBplotData$zscore <- replace(LBplotData$zscore, LBplotData$zscore<(-4),-4) + + #Sort Y-axis by means + meanData <- aggregate(zscore ~ LBTESTCD, FUN = mean, LBplotData) + meanData <- meanData[order(as.vector(meanData$zscore), decreasing = F),] + LBplotData$LBTESTCD <- factor(LBplotData$LBTESTCD, levels = meanData$LBTESTCD) + + qr <- ggplot(LBplotData,aes(x = zscore, y = LBTESTCD, group = LBTESTCD, color = Compound, shape = Species)) + + geom_rect(aes(ymin= -Inf, ymax=Inf,xmin=-1,xmax=1), color = 'gray', fill = "gray", alpha = .05) + + geom_point(size =5) + + scale_color_manual(values=c(rgb(0.8,0.2,0.5,0.9),rgb(0.2,0.5,0.5,0.9),rgb(0.3,0.7,0.9,0.9), rgb(0.1,0.2,0.3,0.9), rgb(0.1,0.8,0.5,0.9))) + + ggtitle(paste0(OrganSystem, " ", testgroup, ' zScore', " - ", Dose, " ", Gender)) + + geom_point(stat = 'summary', color = 'black', shape = '|', size = 10) + scale_x_continuous(limits = c(-4,4))+ + theme_light() + return(qr) + +} \ No newline at end of file diff --git a/R/makeMIPlot.R b/R/makeMIPlot.R new file mode 100644 index 0000000..0cce9f5 --- /dev/null +++ b/R/makeMIPlot.R @@ -0,0 +1,68 @@ +#Output MI Histopathy plot for Cross-Study Analysis for organSystem or all defined +#in CrossStudyGraph_Combined.R or CrossStudyVisualizationApp.R + +#Gender must be restricted for each plot to either M or F or Combined + +#Dose must be specified; Vehicle/Control will be added for comparisson + +#Current organSystem options: REPRODUCTIVE, LIVER, KIDNEY, HEMATOPOIETIC, and +#ENDOCRINE + +makeMIplot <- function(MIresults, OrganSystem, Organ, Dose, Gender, YCLUST, XCLUST){ + + #Check that Vehicle is included in Dose + if ( grepl("Vehicle", Dose) == "FALSE"){ + DOSE <- c(Dose, "Vehicle") + } + + #Limit to Desired OrganSystem and Gender + MIplotData <- MIresults[[OrganSystem]][[Gender]][[Organ]] + + #Limit to Proper Dose + MIplotData <- MIplotData[which(MIplotData$Dose %in% DOSE),] + + #Cluster the Axes + plotDataMapTmp <- dcast(MIplotData, Treatment ~ Finding, value.var = 'Count') + plotDataMapTmp[is.na(plotDataMapTmp)] <- 0 + plotDataMap <- as.matrix(plotDataMapTmp[,2:ncol(plotDataMapTmp)]) + row.names(plotDataMap) <- plotDataMapTmp[,1] + + #Y + if (YCLUST == 'YES'){ + plotDataClustY <- hclust(dist(plotDataMap)) + heatmapOrder <- row.names(plotDataMap) <- row.names(plotDataMap)[plotDataClustY$order] + MIplotData$Treatment <- factor(MIplotData$Treatment, levels = heatmapOrder) + } + + #X + if (XCLUST == 'YES'){ + if (ncol(plotDataMap)<=1) { + #Error Catch for only one finding to skip "ordering" + } else { + plotDataClustX <- hclust(dist((t(plotDataMap)))) + heatmapOrderFindings <- colnames(plotDataMap)[plotDataClustX$order] + MIplotData$Finding <- factor(MIplotData$Finding, levels = heatmapOrderFindings) + MIplotData[['Count']] <- as.numeric(MIplotData[['Count']]) + } + } + + + + + Heatmap <- ggplot(MIplotData) + + geom_tile_pattern(aes(x = Finding, fill = Count, y = Treatment, + pattern_fill = MISEV, pattern_density = MISEV), + pattern= 'stripe', pattern_color="black", color = "grey") + + scale_pattern_density_manual(values = c("0" = 0, "1" = 0.1, "2" = 0.2, "3"=0.3, "4" = 0.4, "5"= 0.5))+ + scale_pattern_fill_brewer(palette = 3)+ + ylab('Study (Species): Treatment') + + ggtitle(paste0(Organ, " - ",Dose, " ",Gender)) + scale_y_discrete( name = 'Study (Species): Treatment' ) + + xlab("Findings") + + #scale_fill_continuous(type = 'gradient', name = 'Incidence')+ + scale_fill_gradient2(low="azure2", mid = "cadetblue1", high = "navy", limits = c(0.0,1.0), name = 'Incidence')+ + theme_classic() + + theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust=1)) + Legend <- get_legend(Heatmap) + Heatmap <- Heatmap + theme(legend.position = "none") + return(print(ggdraw(plot_grid(Heatmap,Legend, align='h', rel_widths = c(4/5,1/5))))) +} diff --git a/R/makeOMPlot.R b/R/makeOMPlot.R new file mode 100644 index 0000000..600f672 --- /dev/null +++ b/R/makeOMPlot.R @@ -0,0 +1,60 @@ +#Output OM plot for Cross-Study Analysis for organSystem or all defined +#in CrossStudyGraph_Combined.R or CrossStudyVisualizationApp.R + +#Gender must be restricted for each plot to either M or F or Combined + +#Dose must be specified;OMMetric (I.e. Brain Ratio or BW Ratio) must be Specified + +#Current organSystem options: REPRODUCTIVE, LIVER, KIDNEY, HEMATOPOIETIC, and +#ENDOCRINE + +makeOMplot <- function(OMresults, OrganSystem, OMMetric, Dose, Gender){ + + #Limit to Desired OrganSystem, Gender, and Dose + OMGraphData <- OMresults[[OrganSystem]][[Gender]] + OMGraphData <- OMGraphData[which(OMGraphData$ARMCD == Dose),] + + #Filter to Chosen Metric + if (OMMetric == "BrainRatio"){ + plotDataOM <- aggregate(BrainRatiozScore ~ StudyID + Compound + Species + OMSPEC + ARMCD, FUN = mean, data = OMGraphData) + } else if (OMMetric == "BWRatio"){ + plotDataOM <- aggregate(BWRatiozScore ~ StudyID + Compound + Species + OMSPEC + ARMCD, FUN = mean, data = OMGraphData) + } else if (OMMetric == "Organ"){ + plotDataOM <- aggregate(OrganzScore ~ StudyID + Compound + Species + OMSPEC + ARMCD, FUN = mean, data = OMGraphData) + } + names(plotDataOM)[6] <- "zScore" + n <- unique(plotDataOM$OMSPEC) # Number of Unique Tissues for Graph Arrangement + if (length(n)==1){ + tissue <- n + plotDataOM2 <- plotDataOM[which(plotDataOM$OMSPEC == tissue),] + #Make maximum/minimum values 4 and -4 + plotDataOM2$zScore <- replace(plotDataOM2$zScore , plotDataOM2$zScore >4,4) + plotDataOM2$zScore <- replace(plotDataOM2$zScore , plotDataOM2$zScore <(-4),-4) + br2 <- ggplot(plotDataOM2, aes(x = StudyID, y=zScore, fill = Compound)) + + geom_bar(stat="identity") + ylab(paste0(OMMetric, " Weight zScore")) + + ggtitle(paste0("OM ", tissue, " ",Dose," - ",Gender)) + + scale_fill_manual(values=c(rgb(0.8,0.2,0.5,0.9),rgb(0.2,0.5,0.5,0.9),rgb(0.3,0.7,0.9,0.9), rgb(0.1,0.2,0.3,0.9), rgb(0.1,0.8,0.5,0.9))) + + ylim(-4,4) + geom_rect(aes(ymin= -1, ymax=1,xmin=0,xmax=Inf), fill = "gray", alpha = .1) + + theme_light() + return(br2) + } else { + p <- list() + for (j in 1:length(n)){ #Filter for multiple organs such as in Hematopoietic + tissue <- n[j] + plotDataOM2 <- plotDataOM[which(plotDataOM$OMSPEC == tissue),] + #Make maximum/minimum values 4 and -4 + plotDataOM2$zScore <- replace(plotDataOM2$zScore , plotDataOM2$zScore >4,4) + plotDataOM2$zScore <- replace(plotDataOM2$zScore , plotDataOM2$zScore <(-4),-4) + p[[j]] <- ggplot(plotDataOM2, aes(x = StudyID, y=zScore, fill = Compound)) + + geom_bar(stat="identity") + ylab(paste0(OMMetric, " Weight zScore")) + + ggtitle(paste0("OM ", tissue, " ",Dose," - ",Gender)) + + scale_fill_manual(values=c(rgb(0.8,0.2,0.5,0.9),rgb(0.2,0.5,0.5,0.9),rgb(0.3,0.7,0.9,0.9), rgb(0.1,0.2,0.3,0.9), rgb(0.1,0.8,0.5,0.9))) + + ylim(-4,4) + geom_rect(aes(ymin= -1, ymax=1,xmin=0,xmax=Inf), fill = "gray", alpha = .1) + + theme_light() + } + p <- do.call(grid.arrange,p) + + return(p) + } + +} \ No newline at end of file diff --git a/R/makeRadar.R b/R/makeRadar.R new file mode 100644 index 0000000..a77656f --- /dev/null +++ b/R/makeRadar.R @@ -0,0 +1,90 @@ +#Output Radar plot for Cross-Study Analysis for organSystem or all defined +#in CrossStudyGraph_Combined.R or CrossStudyVisualizationApp.R + +#Gender must be restricted for each plot to either M or F or Combined + +#Current organSystem options: ALL, SUMMARY, REPRODUCTIVE, LIVER, KIDNEY, HEMATOPOIETIC, +#ENDOCRINE and BW + +makeRadar <- function(summaryData, organSystem, Gender) { + #saveRDS(summaryData,"summaryData.rds") + ## library(fmsb) + organSystem <- toupper(organSystem) + #Limit summaryData to desired Organ System + if (organSystem %in% c('ALL', 'SUMMARY')) + { + #Takes Summary Values which do not have '.' + Data <- summaryData[!grepl("\\.", rownames(summaryData)),] + Title <- "Summary" + a <- 0 + } else { + #Limits summaryData to desired organSystem for individual radar plots + Data <- summaryData[which(grepl(paste0(organSystem,"."),rownames(summaryData))),] + Title <- organSystem + a <- 1 + } + + #Limit to Gender Desired + Gender <- toupper(Gender) + Data <- Data[ ,which(grepl(Gender, colnames(Data)))] + + #Create better labeps + if (a == 0){ + + } else { + rownames(Data) <- gsub(paste0(organSystem,"."),"",rownames(Data)) + } + + #Format Data for RadarChart by adding min and max to dataset + Data <- t(Data) + Data <- rbind(rep(3,ncol(Data)),rep(0,ncol(Data)), Data) + Data <- as.data.frame(Data) + + #Create Group Names + GroupNames <-str_replace(rownames(Data)[3:nrow(Data)],"\\.", " ") + #Grab Num Species/Compounds from GroupNames + Species <- word(GroupNames,1) + Compounds <- substr(word(GroupNames,2),1, nchar(word(GroupNames,2))-2) + + #Set Colors for Radar Plot using Compounds + ColorOptions <- c(rgb(0.8,0.2,0.5,0.9),rgb(0.2,0.5,0.5,0.9),rgb(0.3,0.7,0.9,0.9), rgb(0.1,0.2,0.3,0.9), rgb(0.1,0.8,0.5,0.9)) + i <- 1 + for (Compound in unique(Compounds)){ + Compounds <- str_replace_all(Compounds,Compound, ColorOptions[i]) + i <- i+1 + } + colors_border <- Compounds + + #Set Shape for Radar using Species + shapes_line_options <- c('1','2','3','4') + shapes_point_options <- c('16','17','15','18') + legend_point_options <- c('20','17','15','18') + SpeciesFormat <- data.frame(shapes = Species, + points = Species, + legends = Species) + j <- 1 + for (animal in unique(Species)){ + SpeciesFormat$shapes <- str_replace_all(SpeciesFormat$shapes, animal, shapes_line_options[j]) + SpeciesFormat$points <- str_replace_all(SpeciesFormat$points, animal, shapes_line_options[j]) + SpeciesFormat$legends <- str_replace_all(SpeciesFormat$legends, animal, shapes_line_options[j]) + j <- j+1 + } + shapes_line <- as.numeric(SpeciesFormat$shapes) + shapes_point <- as.numeric(SpeciesFormat$points) + legend_point <- as.numeric(SpeciesFormat$legends) + #saveRDS(Data,"Data.rds") + #Generate Radar plot + par(xpd= TRUE,mar = c(1,12,2,12), oma = c(1,12,2,12)) + radarplot <- radarchart_point(Data, axistype = 1, + #Customize Background Grid + cglcol = "grey",cglwd = 1,cglty=1, + #Axis Labels + axislabcol="grey",vlcex=1.5,caxislabels = seq(0,3,1), seg = 3, + #Customize Data Coloring + pty= shapes_point, plty = shapes_line, pcol = colors_border,plwd = 2.5, + title = paste0(Title, " Radar Plot"), cex_point= 2) + legend("topright",legend=GroupNames, bty = "n", pch = legend_point, + col = colors_border, text.col = "black", cex = 1.5, pt.cex = 1.2, y.intersp = 1) + p <- recordPlot(radarplot) + return(p) +} diff --git a/R/radarchart_point.R b/R/radarchart_point.R new file mode 100644 index 0000000..e7afe3b --- /dev/null +++ b/R/radarchart_point.R @@ -0,0 +1,104 @@ + +radarchart_point <- function(df, axistype=0, seg=4, pty=16, pcol=1:8, plty=1:6, plwd=1, + pdensity=NULL, pangle=45, pfcol=NA, cglty=3, cglwd=1, + cglcol="navy", axislabcol="blue", title="", maxmin=TRUE, + na.itp=TRUE, centerzero=FALSE, vlabels=NULL, vlcex=NULL, + caxislabels=NULL, calcex=NULL, + paxislabels=NULL, palcex=NULL, cex_point=NULL, ...) { + if (!is.data.frame(df)) { cat("The data must be given as dataframe.\n"); return() } + if ((n <- length(df))<3) { cat("The number of variables must be 3 or more.\n"); return() } + if (maxmin==FALSE) { # when the dataframe does not include max and min as the top 2 rows. + dfmax <- apply(df, 2, max) + dfmin <- apply(df, 2, min) + df <- rbind(dfmax, dfmin, df) + } + plot(c(-1.2, 1.2), c(-1.2, 1.2), type="n", frame.plot=FALSE, axes=FALSE, + xlab="", ylab="", main=title, asp=1, ...) # define x-y coordinates without any plot + theta <- seq(90, 450, length=n+1)*pi/180 + theta <- theta[1:n] + xx <- cos(theta) + yy <- sin(theta) + CGap <- ifelse(centerzero, 0, 1) + for (i in 0:seg) { # complementary guide lines, dotted navy line by default + polygon(xx*(i+CGap)/(seg+CGap), yy*(i+CGap)/(seg+CGap), lty=cglty, lwd=cglwd, border=cglcol) + if (axistype==1|axistype==3) CAXISLABELS <- paste(i/seg*100,"(%)") + if (axistype==4|axistype==5) CAXISLABELS <- sprintf("%3.2f",i/seg) + if (!is.null(caxislabels)&(i1, j-1, n) + while (is.na(df[i, left])) { + left <- ifelse(left>1, left-1, n) + } + right <- ifelse(j xxright) { + xxtmp <- xxleft; yytmp <- yyleft; + xxleft <- xxright; yyleft <- yyright; + xxright <- xxtmp; yyright <- yytmp; + } + xxs[j] <- xx[j]*(yyleft*xxright-yyright*xxleft)/(yy[j]*(xxright-xxleft)-xx[j]*(yyright-yyleft)) + yys[j] <- (yy[j]/xx[j])*xxs[j] + } else { # treat NA as zero (origin) + xxs[j] <- 0 + yys[j] <- 0 + } + } + else { + xxs[j] <- xx[j]*CGap/(seg+CGap)+xx[j]*(df[i, j]-df[2, j])/(df[1, j]-df[2, j])*seg/(seg+CGap) + yys[j] <- yy[j]*CGap/(seg+CGap)+yy[j]*(df[i, j]-df[2, j])/(df[1, j]-df[2, j])*seg/(seg+CGap) + } + } + if (is.null(pdensities)) { + polygon(xxs, yys, lty=pltys[i-2], lwd=plwds[i-2], border=pcols[i-2], col=pfcols[i-2]) + } else { + polygon(xxs, yys, lty=pltys[i-2], lwd=plwds[i-2], border=pcols[i-2], + density=pdensities[i-2], angle=pangles[i-2], col=pfcols[i-2]) + } + points(xx*scale, yy*scale, pch=ptys[i-2], col=pcols[i-2], cex= cex_point) + } + } +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..3642001 --- /dev/null +++ b/README.md @@ -0,0 +1,66 @@ +# sendSummarizer +sendSummarizer is an R package includes functions to calculate toxicity score +of a given repeat-dose toxicological study. + +- paper +- [paper link](https://academic.oup.com/toxsci/article/200/2/277/7690167?login=true) + +- Poster +- [poster](https://www.lexjansen.com/css-us/2022/POS_PP23.pdf) + + + +# Installation + +clone the repo and follow the instructions. + +### for development + +``` +setwd('biocelerate-cross-study/') +devtools::load_all(".") +sendSummarizer::send_cross_study_app('path_database.db') + +``` + +### for using the package + +``` +setwd('biocelerate-cross-study/') +devtools::install(".") +sendSummarizer::send_cross_study_app('path_database.db') + +``` + +# more example + +```{R} + +path_db <- "C:/directory/send.db" +studyid <- '112344' + +# app +send_cross_study_app(path_db) + +# score +mi_score <- get_mi_score(studyid, path_db) +mi_score + + +lb_score <- get_lb_score(studyid, path_db) +lb_score + +bw_score <- get_bw_score(studyid, path_db) +bw_score + +all_score <- get_all_score(studyid, path_db, domain = c('lb', 'bw', 'mi')) +all_score + + + +compile <- get_compile_data(studyid, path_db) +compile + + + +``` diff --git a/app.R b/app.R new file mode 100644 index 0000000..587dc7e --- /dev/null +++ b/app.R @@ -0,0 +1,4 @@ +devtools::load_all('.') + +path <- "path/to/database.db" +sendSummarizer::send_cross_study_app(path) diff --git a/man/get_all_score.Rd b/man/get_all_score.Rd new file mode 100644 index 0000000..5c16426 --- /dev/null +++ b/man/get_all_score.Rd @@ -0,0 +1,29 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/get_final_score.R +\name{get_all_score} +\alias{get_all_score} +\title{get all score} +\usage{ +get_all_score(studyid, path_db, domain = c("lb", "mi", "bw")) +} +\arguments{ +\item{studyid}{Mandatory, character \cr +Studyid number} + +\item{path_db}{Mandatory, character \cr +path of database} + +\item{domain}{Mandatory, character or vector \cr +either string or vector of domain name} +} +\value{ +dataframe +} +\description{ +get all score +} +\examples{ +\dontrun{ +get_all_score(studyid='1234123', path_db='path/to/database.db', domain=c('lb')) +} +} diff --git a/man/get_bw_score.Rd b/man/get_bw_score.Rd new file mode 100644 index 0000000..cc475ed --- /dev/null +++ b/man/get_bw_score.Rd @@ -0,0 +1,26 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/get_bw_score.R +\name{get_bw_score} +\alias{get_bw_score} +\title{get BW score for a given studyid} +\usage{ +get_bw_score(studyid, path_db) +} +\arguments{ +\item{studyid}{Mandatory, character \cr +Studyid number} + +\item{path_db}{Mandatory, character \cr +path of database} +} +\value{ +dataframe +} +\description{ +get BW score for a given studyid +} +\examples{ +\dontrun{ +get_bw_score(studyid='1234123', path_db='path/to/database.db') +} +} diff --git a/man/get_compile_data.Rd b/man/get_compile_data.Rd new file mode 100644 index 0000000..68cff79 --- /dev/null +++ b/man/get_compile_data.Rd @@ -0,0 +1,26 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/get_compile_data.R +\name{get_compile_data} +\alias{get_compile_data} +\title{filter out tk and recovery animal} +\usage{ +get_compile_data(studyid, path_db) +} +\arguments{ +\item{studyid}{Mandatory, character \cr +Studyid number} + +\item{path_db}{Mandatory, character \cr +path of database} +} +\value{ +dataframe +} +\description{ +filter out tk and recovery animal +} +\examples{ +\dontrun{ +get_compile_data(studyid='1234123', path_db='path/to/database.db') +} +} diff --git a/man/get_doses.Rd b/man/get_doses.Rd new file mode 100644 index 0000000..739381a --- /dev/null +++ b/man/get_doses.Rd @@ -0,0 +1,26 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/get_doses.R +\name{get_doses} +\alias{get_doses} +\title{filter out tk and recovery animal} +\usage{ +get_doses(studyid, path_db, xpt_dir = NULL) +} +\arguments{ +\item{studyid}{Mandatory, character \cr +Studyid number} + +\item{path_db}{Mandatory, character \cr +path of database} +} +\value{ +dataframe +} +\description{ +filter out tk and recovery animal +} +\examples{ +\dontrun{ +get_doses(studyid='1234123', path_db='path/to/database.db') +} +} diff --git a/man/get_lb_score.Rd b/man/get_lb_score.Rd new file mode 100644 index 0000000..1414060 --- /dev/null +++ b/man/get_lb_score.Rd @@ -0,0 +1,26 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/get_lb_score.R +\name{get_lb_score} +\alias{get_lb_score} +\title{get LB score for a given studyid} +\usage{ +get_lb_score(studyid, path_db) +} +\arguments{ +\item{studyid}{Mandatory, character \cr +Studyid number} + +\item{path_db}{Mandatory, character \cr +path of database} +} +\value{ +score +} +\description{ +get LB score for a given studyid +} +\examples{ +\dontrun{ +get_lb_score(studyid='1234123', path_db='path/to/database.db') +} +} diff --git a/man/get_mi_score.Rd b/man/get_mi_score.Rd new file mode 100644 index 0000000..f45fece --- /dev/null +++ b/man/get_mi_score.Rd @@ -0,0 +1,26 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/get_mi_score.R +\name{get_mi_score} +\alias{get_mi_score} +\title{get MI score for a given studyid} +\usage{ +get_mi_score(studyid, path_db) +} +\arguments{ +\item{studyid}{Mandatory, character \cr +Studyid number} + +\item{path_db}{Mandatory, character \cr +path of database} +} +\value{ +score +} +\description{ +get MI score for a given studyid +} +\examples{ +\dontrun{ +get_mi_score(studyid='1234123', path_db='path/to/database.db') +} +} diff --git a/man/get_treatment_group.Rd b/man/get_treatment_group.Rd new file mode 100644 index 0000000..5635b10 --- /dev/null +++ b/man/get_treatment_group.Rd @@ -0,0 +1,23 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/get_treatment_group.R +\name{get_treatment_group} +\alias{get_treatment_group} +\title{get treatment group} +\usage{ +get_treatment_group(studies = NULL, db_path) +} +\arguments{ +\item{ind}{Mandatory, character or vector \cr +Studies number} +} +\value{ +list +} +\description{ +get treatment group +} +\examples{ +\dontrun{ +get_treatment_group(studies = '12345678', db_path = 'path/to/sqllite/database.db') +} +} diff --git a/man/groupSEND.Rd b/man/groupSEND.Rd new file mode 100644 index 0000000..472abbe --- /dev/null +++ b/man/groupSEND.Rd @@ -0,0 +1,35 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/groupSEND.R +\name{groupSEND} +\alias{groupSEND} +\title{Merge demographic and treatment data for each of the SEND experimental results domains} +\usage{ +groupSEND( + dataset, + targetDomain, + dmFields = c("SEX", "ARMCD", "SETCD", "USUBJID", "RFSTDTC"), + exFields = c("EXTRT", "EXDOSE", "EXDOSU"), + txParams = c("TRTDOS", "TRTDOSU", "TKDESC", "GRPLBL", "SPGRPCD") +) +} +\arguments{ +\item{dataset}{Mandatory, character\cr +dataset} + +\item{dmFields}{Mandatory, vector\cr +vector of variables} + +\item{exFields}{Mandatory, vector\cr +vector of variables} +} +\value{ +table +} +\description{ +Merge demographic and treatment data for each of the SEND experimental results domains +} +\examples{ +\dontrun{ +groupSEND() +} +} diff --git a/man/send_cross_study_app.Rd b/man/send_cross_study_app.Rd new file mode 100644 index 0000000..6e27d3e --- /dev/null +++ b/man/send_cross_study_app.Rd @@ -0,0 +1,23 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/CrossStudyVisualizationApp_LoadExternal.R +\name{send_cross_study_app} +\alias{send_cross_study_app} +\title{Run sendCrossStudy app} +\usage{ +send_cross_study_app(database_path) +} +\arguments{ +\item{database_path}{Optional, character\cr +file path for database} +} +\value{ +function run the app. +} +\description{ +Run sendCrossStudy app +} +\examples{ +\dontrun{ +send_cross_study_app() +} +} diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..6925eb3 --- /dev/null +++ b/manifest.json @@ -0,0 +1,4115 @@ +{ + "version": 1, + "locale": "en_US", + "platform": "4.2.3", + "metadata": { + "appmode": "shiny", + "primary_rmd": null, + "primary_html": null, + "content_category": null, + "has_parameters": false + }, + "packages": { + "BH": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "BH", + "Type": "Package", + "Title": "Boost C++ Header Files", + "Version": "1.78.0-0", + "Date": "2021-12-14", + "Author": "Dirk Eddelbuettel, John W. Emerson and Michael J. Kane", + "Maintainer": "Dirk Eddelbuettel ", + "Description": "Boost provides free peer-reviewed portable C++ source \n libraries. A large part of Boost is provided as C++ template code\n which is resolved entirely at compile-time without linking. This \n package aims to provide the most useful subset of Boost libraries \n for template use among CRAN packages. By placing these libraries in \n this package, we offer a more efficient distribution system for CRAN \n as replication of this code in the sources of other packages is \n avoided. As of release 1.78.0-0, the following Boost libraries are\n included: 'accumulators' 'algorithm' 'align' 'any' 'atomic' 'beast'\n 'bimap' 'bind' 'circular_buffer' 'compute' 'concept' 'config'\n 'container' 'date_time' 'detail' 'dynamic_bitset' 'exception'\n 'flyweight' 'foreach' 'functional' 'fusion' 'geometry' 'graph' 'heap'\n 'icl' 'integer' 'interprocess' 'intrusive' 'io' 'iostreams'\n 'iterator' 'lambda2' 'math' 'move' 'mp11' 'mpl' 'multiprecision'\n 'numeric' 'pending' 'phoenix' 'polygon' 'preprocessor' 'process'\n 'propery_tree' 'random' 'range' 'scope_exit' 'smart_ptr' 'sort'\n 'spirit' 'tuple' 'type_traits' 'typeof' 'unordered' 'utility' 'uuid'.", + "License": "BSL-1.0", + "URL": "https://github.com/eddelbuettel/bh,\nhttps://dirk.eddelbuettel.com/code/bh.html", + "BugReports": "https://github.com/eddelbuettel/bh/issues", + "NeedsCompilation": "no", + "Packaged": "2021-12-14 21:51:21 UTC; edd", + "Repository": "CRAN", + "Date/Publication": "2021-12-15 07:50:08 UTC", + "Built": "R 4.1.0; ; 2022-11-05 08:08:34 UTC; unix" + } + }, + "DBI": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "DBI", + "Title": "R Database Interface", + "Version": "1.2.3", + "Date": "2024-06-02", + "Authors@R": "c(\n person(\"R Special Interest Group on Databases (R-SIG-DB)\", role = \"aut\"),\n person(\"Hadley\", \"Wickham\", role = \"aut\"),\n person(\"Kirill\", \"Müller\", , \"kirill@cynkra.com\", role = c(\"aut\", \"cre\"),\n comment = c(ORCID = \"0000-0002-1416-3412\")),\n person(\"R Consortium\", role = \"fnd\")\n )", + "Description": "A database interface definition for communication between R\n and relational database management systems. All classes in this\n package are virtual and need to be extended by the various R/DBMS\n implementations.", + "License": "LGPL (>= 2.1)", + "URL": "https://dbi.r-dbi.org, https://github.com/r-dbi/DBI", + "BugReports": "https://github.com/r-dbi/DBI/issues", + "Depends": "methods, R (>= 3.0.0)", + "Suggests": "arrow, blob, covr, DBItest, dbplyr, downlit, dplyr, glue,\nhms, knitr, magrittr, nanoarrow (>= 0.3.0.1), RMariaDB,\nrmarkdown, rprojroot, RSQLite (>= 1.1-2), testthat (>= 3.0.0),\nvctrs, xml2", + "VignetteBuilder": "knitr", + "Config/autostyle/scope": "line_breaks", + "Config/autostyle/strict": "false", + "Config/Needs/check": "r-dbi/DBItest", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.1", + "Config/Needs/website": "r-dbi/DBItest, r-dbi/dbitemplate, adbi,\nAzureKusto, bigrquery, DatabaseConnector, dittodb, duckdb,\nimplyr, lazysf, odbc, pool, RAthena, IMSMWU/RClickhouse, RH2,\nRJDBC, RMariaDB, RMySQL, RPostgres, RPostgreSQL, RPresto,\nRSQLite, sergeant, sparklyr, withr", + "Config/testthat/edition": "3", + "NeedsCompilation": "no", + "Packaged": "2024-06-02 20:26:05 UTC; kirill", + "Author": "R Special Interest Group on Databases (R-SIG-DB) [aut],\n Hadley Wickham [aut],\n Kirill Müller [aut, cre] (),\n R Consortium [fnd]", + "Maintainer": "Kirill Müller ", + "Repository": "CRAN", + "Date/Publication": "2024-06-02 21:50:02 UTC", + "Built": "R 4.2.3; ; 2024-06-14 16:49:00 UTC; unix" + } + }, + "DT": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "DT", + "Type": "Package", + "Title": "A Wrapper of the JavaScript Library 'DataTables'", + "Version": "0.21", + "Authors@R": "c(\n person(\"Yihui\", \"Xie\", email = \"xie@yihui.name\", role = c(\"aut\", \"cre\")),\n person(\"Joe\", \"Cheng\", role = \"aut\"),\n person(\"Xianying\", \"Tan\", role = \"aut\"),\n person(\"JJ\", \"Allaire\", role = \"ctb\"),\n person(\"Maximilian\", \"Girlich\", role = \"ctb\"),\n person(\"Greg\", \"Freedman Ellis\", role = \"ctb\"),\n person(\"Johannes\", \"Rauh\", role = \"ctb\"),\n person(\"SpryMedia Limited\", role = c(\"ctb\", \"cph\"), comment = \"DataTables in htmlwidgets/lib\"),\n person(\"Brian\", \"Reavis\", role = c(\"ctb\", \"cph\"), comment = \"selectize.js in htmlwidgets/lib\"),\n person(\"Leon\", \"Gersen\", role = c(\"ctb\", \"cph\"), comment = \"noUiSlider in htmlwidgets/lib\"),\n person(\"Bartek\", \"Szopka\", role = c(\"ctb\", \"cph\"), comment = \"jquery.highlight.js in htmlwidgets/lib\"),\n person(\"Alex\", \"Pickering\", role = c(\"ctb\")),\n person(\"William\", \"Holmes\", role = c(\"ctb\")),\n person(\"RStudio, PBC\", role = \"cph\")\n )", + "Maintainer": "Yihui Xie ", + "Description": "Data objects in R can be rendered as HTML tables using the\n JavaScript library 'DataTables' (typically via R Markdown or Shiny). The\n 'DataTables' library has been included in this R package. The package name\n 'DT' is an abbreviation of 'DataTables'.", + "URL": "https://github.com/rstudio/DT", + "BugReports": "https://github.com/rstudio/DT/issues", + "License": "GPL-3 | file LICENSE", + "Imports": "htmltools (>= 0.3.6), htmlwidgets (>= 1.3), jsonlite (>=\n0.9.16), magrittr, crosstalk, jquerylib, promises", + "Suggests": "knitr (>= 1.8), rmarkdown, shiny (>= 1.6), bslib, testit", + "VignetteBuilder": "knitr", + "RoxygenNote": "7.1.2", + "Encoding": "UTF-8", + "NeedsCompilation": "no", + "Packaged": "2022-02-26 03:47:41 UTC; yihui", + "Author": "Yihui Xie [aut, cre],\n Joe Cheng [aut],\n Xianying Tan [aut],\n JJ Allaire [ctb],\n Maximilian Girlich [ctb],\n Greg Freedman Ellis [ctb],\n Johannes Rauh [ctb],\n SpryMedia Limited [ctb, cph] (DataTables in htmlwidgets/lib),\n Brian Reavis [ctb, cph] (selectize.js in htmlwidgets/lib),\n Leon Gersen [ctb, cph] (noUiSlider in htmlwidgets/lib),\n Bartek Szopka [ctb, cph] (jquery.highlight.js in htmlwidgets/lib),\n Alex Pickering [ctb],\n William Holmes [ctb],\n RStudio, PBC [cph]", + "Repository": "CRAN", + "Date/Publication": "2022-02-26 11:10:02 UTC", + "Built": "R 4.1.0; ; 2022-09-02 16:33:15 UTC; unix" + } + }, + "DescTools": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "DescTools", + "Type": "Package", + "Title": "Tools for Descriptive Statistics", + "Version": "0.99.44", + "Date": "2021-11-22", + "Authors@R": "c(\n person(\"Andri\", \"Signorell\", email = \"andri@signorell.net\", role = c(\"aut\", \"cre\")),\n person(\"Ken\" , \"Aho\", role = c(\"ctb\")),\n person(\"Andreas\" , \"Alfons\", role = c(\"ctb\")),\n person(\"Nanina\" , \"Anderegg\", role = c(\"ctb\")),\n person(\"Tomas\" , \"Aragon\", role = c(\"ctb\")),\n person(\"Chandima\" , \"Arachchige\", role = c(\"ctb\")),\n person(\"Antti\" , \"Arppe\", role = c(\"ctb\")),\n person(\"Adrian\" , \"Baddeley\", role = c(\"ctb\")),\n person(\"Kamil\" , \"Barton\", role = c(\"ctb\")),\n person(\"Ben\" , \"Bolker\", role = c(\"ctb\")),\n person(\"Hans W.\" , \"Borchers\", role = c(\"ctb\")),\n person(\"Frederico\" , \"Caeiro\", role = c(\"ctb\")),\n person(\"Stephane\" , \"Champely\", role = c(\"ctb\")),\n person(\"Daniel\" , \"Chessel\", role = c(\"ctb\")),\n person(\"Leanne\" , \"Chhay\", role = c(\"ctb\")),\n person(\"Nicholas\" , \"Cooper\", role = c(\"ctb\")),\n person(\"Clint\" , \"Cummins\", role = c(\"ctb\")),\n person(\"Michael\" , \"Dewey\", role = c(\"ctb\")),\n person(\"Harold C.\" , \"Doran\", role = c(\"ctb\")),\n person(\"Stephane\" , \"Dray\", role = c(\"ctb\")),\n person(\"Charles\" , \"Dupont\", role = c(\"ctb\")),\n person(\"Dirk\" , \"Eddelbuettel\", role = c(\"ctb\")),\n person(\"Claus\" , \"Ekstrom\", role = c(\"ctb\")),\n person(\"Martin\" , \"Elff\", role = c(\"ctb\")),\n person(\"Jeff\" , \"Enos\", role = c(\"ctb\")),\n person(\"Richard W.\" , \"Farebrother\", role = c(\"ctb\")),\n person(\"John\" , \"Fox\", role = c(\"ctb\")),\n person(\"Romain\" , \"Francois\", role = c(\"ctb\")),\n person(\"Michael\" , \"Friendly\", role = c(\"ctb\")),\n person(\"Tal\" , \"Galili\", role = c(\"ctb\")),\n person(\"Matthias\" , \"Gamer\", role = c(\"ctb\")),\n person(\"Joseph L.\" , \"Gastwirth\", role = c(\"ctb\")),\n person(\"Vilmantas\" , \"Gegzna\", role = c(\"ctb\")),\n person(\"Yulia R.\" , \"Gel\", role = c(\"ctb\")),\n person(\"Sereina\" , \"Graber\", role = c(\"ctb\")),\n person(\"Juergen\" , \"Gross\", role = c(\"ctb\")),\n person(\"Gabor\" , \"Grothendieck\", role = c(\"ctb\")),\n person(\"Frank E.\" , \"Harrell Jr\", role = c(\"ctb\")),\n person(\"Richard\" , \"Heiberger\", role = c(\"ctb\")),\n person(\"Michael\" , \"Hoehle\", role = c(\"ctb\")),\n person(\"Christian W.\" , \"Hoffmann\", role = c(\"ctb\")),\n person(\"Soeren\" , \"Hojsgaard\", role = c(\"ctb\")),\n person(\"Torsten\" , \"Hothorn\", role = c(\"ctb\")),\n person(\"Markus\" , \"Huerzeler\", role = c(\"ctb\")),\n person(\"Wallace W.\" , \"Hui\", role = c(\"ctb\")),\n person(\"Pete\" , \"Hurd\", role = c(\"ctb\")),\n person(\"Rob J.\" , \"Hyndman\", role = c(\"ctb\")),\n person(\"Christopher\" , \"Jackson\", role = c(\"ctb\")),\n person(\"Matthias\" , \"Kohl\", role = c(\"ctb\")),\n person(\"Mikko\" , \"Korpela\", role = c(\"ctb\")),\n person(\"Max\" , \"Kuhn\", role = c(\"ctb\")),\n person(\"Detlew\" , \"Labes\", role = c(\"ctb\")),\n person(\"Friederich\" , \"Leisch\", role = c(\"ctb\")),\n person(\"Jim\" , \"Lemon\", role = c(\"ctb\")),\n person(\"Dong\" , \"Li\", role = c(\"ctb\")),\n person(\"Martin\" , \"Maechler\", role = c(\"ctb\")),\n person(\"Arni\" , \"Magnusson\", role = c(\"ctb\")),\n person(\"Ben\" , \"Mainwaring\", role = c(\"ctb\")),\n person(\"Daniel\" , \"Malter\", role = c(\"ctb\")),\n person(\"George\" , \"Marsaglia\", role = c(\"ctb\")),\n person(\"John\" , \"Marsaglia\", role = c(\"ctb\")),\n person(\"Alina\" , \"Matei\", role = c(\"ctb\")),\n person(\"David\" , \"Meyer\", role = c(\"ctb\")),\n person(\"Weiwen\" , \"Miao\", role = c(\"ctb\")),\n person(\"Giovanni\" , \"Millo\", role = c(\"ctb\")),\n person(\"Yongyi\" , \"Min\", role = c(\"ctb\")),\n person(\"David\" , \"Mitchell\", role = c(\"ctb\")),\n person(\"Franziska\" , \"Mueller\", role = c(\"ctb\")),\n person(\"Markus\" , \"Naepflin\", role = c(\"ctb\")),\n person(\"Daniel\" , \"Navarro\", role = c(\"ctb\")),\n person(\"Henric\" , \"Nilsson\", role = c(\"ctb\")),\n person(\"Klaus\" , \"Nordhausen\", role = c(\"ctb\")),\n person(\"Derek\" , \"Ogle\", role = c(\"ctb\")),\n person(\"Hong\" , \"Ooi\", role = c(\"ctb\")),\n person(\"Nick\" , \"Parsons\", role = c(\"ctb\")),\n person(\"Sandrine\" , \"Pavoine\", role = c(\"ctb\")),\n person(\"Tony\" , \"Plate\", role = c(\"ctb\")),\n person(\"Luke\" , \"Prendergast\", role = c(\"ctb\")),\n person(\"Roland\" , \"Rapold\", role = c(\"ctb\")),\n person(\"William\" , \"Revelle\", role = c(\"ctb\")),\n person(\"Tyler\" , \"Rinker\", role = c(\"ctb\")),\n person(\"Brian D.\" , \"Ripley\", role = c(\"ctb\")),\n person(\"Caroline\" , \"Rodriguez\", role = c(\"ctb\")),\n person(\"Nathan\" , \"Russell\", role = c(\"ctb\")),\n person(\"Nick\" , \"Sabbe\", role = c(\"ctb\")),\n person(\"Ralph\" , \"Scherer\", role = c(\"ctb\")),\n person(\"Venkatraman E.\", \"Seshan\", role = c(\"ctb\")),\n person(\"Michael\" , \"Smithson\", role = c(\"ctb\")),\n person(\"Greg\" , \"Snow\", role = c(\"ctb\")),\n person(\"Karline\" , \"Soetaert\", role = c(\"ctb\")),\n person(\"Werner A.\" , \"Stahel\", role = c(\"ctb\")),\n person(\"Alec\" , \"Stephenson\", role = c(\"ctb\")),\n person(\"Mark\" , \"Stevenson\", role = c(\"ctb\")),\n person(\"Ralf\" , \"Stubner\", role = c(\"ctb\")),\n person(\"Matthias\" , \"Templ\", role = c(\"ctb\")),\n person(\"Duncan\" , \"Temple Lang\", role = c(\"ctb\")),\n person(\"Terry\" , \"Therneau\", role = c(\"ctb\")),\n person(\"Yves\" , \"Tille\", role = c(\"ctb\")),\n person(\"Luis\" , \"Torgo\", role = c(\"ctb\")),\n person(\"Adrian\" , \"Trapletti\", role = c(\"ctb\")),\n person(\"Joshua\" , \"Ulrich\", role = c(\"ctb\")),\n person(\"Kevin\" , \"Ushey\", role = c(\"ctb\")),\n person(\"Jeremy\" , \"VanDerWal\", role = c(\"ctb\")),\n person(\"Bill\" , \"Venables\", role = c(\"ctb\")),\n person(\"John\" , \"Verzani\", role = c(\"ctb\")),\n person(\"Pablo J.\" , \"Villacorta Iglesias\", role = c(\"ctb\")),\n person(\"Gregory R.\" , \"Warnes\", role = c(\"ctb\")),\n person(\"Stefan\" , \"Wellek\", role = c(\"ctb\")),\n person(\"Hadley\" , \"Wickham\", role = c(\"ctb\")),\n person(\"Rand R.\" , \"Wilcox\", role = c(\"ctb\")),\n person(\"Peter\" , \"Wolf\", role = c(\"ctb\")),\n person(\"Daniel\" , \"Wollschlaeger\", role = c(\"ctb\")),\n person(\"Joseph\" , \"Wood\", role = c(\"ctb\")),\n person(\"Ying\" , \"Wu\", role = c(\"ctb\")),\n person(\"Thomas\" , \"Yee\", role = c(\"ctb\")),\n person(\"Achim\" , \"Zeileis\", role = c(\"ctb\"))\n )", + "Description": "A collection of miscellaneous basic statistic functions and convenience wrappers for efficiently describing data. The author's intention was to create a toolbox, which facilitates the (notoriously time consuming) first descriptive tasks in data analysis, consisting of calculating descriptive statistics, drawing graphical summaries and reporting the results. The package contains furthermore functions to produce documents using MS Word (or PowerPoint) and functions to import data from Excel. Many of the included functions can be found scattered in other packages and other sources written partly by Titans of R. The reason for collecting them here, was primarily to have them consolidated in ONE instead of dozens of packages (which themselves might depend on other packages which are not needed at all), and to provide a common and consistent interface as far as function and arguments naming, NA handling, recycling rules etc. are concerned. Google style guides were used as naming rules (in absence of convincing alternatives). The 'BigCamelCase' style was consequently applied to functions borrowed from contributed R packages as well.", + "Suggests": "RDCOMClient, tcltk, VGAM, R.rsp", + "Depends": "base, stats, R (>= 3.6.0)", + "Imports": "graphics, grDevices, methods, MASS, utils, boot, mvtnorm,\nexpm, Rcpp (>= 0.12.10), rstudioapi, Exact, gld, data.table", + "LinkingTo": "Rcpp, BH", + "License": "GPL (>= 2)", + "LazyLoad": "yes", + "LazyData": "yes", + "Additional_repositories": "http://www.omegahat.net/R", + "URL": "https://andrisignorell.github.io/DescTools/,\nhttps://github.com/AndriSignorell/DescTools/", + "BugReports": "https://github.com/AndriSignorell/DescTools/issues", + "SystemRequirements": "C++11", + "RoxygenNote": "6.1.1", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "VignetteBuilder": "R.rsp", + "Packaged": "2021-11-22 11:54:55 UTC; andri", + "Author": "Andri Signorell [aut, cre],\n Ken Aho [ctb],\n Andreas Alfons [ctb],\n Nanina Anderegg [ctb],\n Tomas Aragon [ctb],\n Chandima Arachchige [ctb],\n Antti Arppe [ctb],\n Adrian Baddeley [ctb],\n Kamil Barton [ctb],\n Ben Bolker [ctb],\n Hans W. Borchers [ctb],\n Frederico Caeiro [ctb],\n Stephane Champely [ctb],\n Daniel Chessel [ctb],\n Leanne Chhay [ctb],\n Nicholas Cooper [ctb],\n Clint Cummins [ctb],\n Michael Dewey [ctb],\n Harold C. Doran [ctb],\n Stephane Dray [ctb],\n Charles Dupont [ctb],\n Dirk Eddelbuettel [ctb],\n Claus Ekstrom [ctb],\n Martin Elff [ctb],\n Jeff Enos [ctb],\n Richard W. Farebrother [ctb],\n John Fox [ctb],\n Romain Francois [ctb],\n Michael Friendly [ctb],\n Tal Galili [ctb],\n Matthias Gamer [ctb],\n Joseph L. Gastwirth [ctb],\n Vilmantas Gegzna [ctb],\n Yulia R. Gel [ctb],\n Sereina Graber [ctb],\n Juergen Gross [ctb],\n Gabor Grothendieck [ctb],\n Frank E. Harrell Jr [ctb],\n Richard Heiberger [ctb],\n Michael Hoehle [ctb],\n Christian W. Hoffmann [ctb],\n Soeren Hojsgaard [ctb],\n Torsten Hothorn [ctb],\n Markus Huerzeler [ctb],\n Wallace W. Hui [ctb],\n Pete Hurd [ctb],\n Rob J. Hyndman [ctb],\n Christopher Jackson [ctb],\n Matthias Kohl [ctb],\n Mikko Korpela [ctb],\n Max Kuhn [ctb],\n Detlew Labes [ctb],\n Friederich Leisch [ctb],\n Jim Lemon [ctb],\n Dong Li [ctb],\n Martin Maechler [ctb],\n Arni Magnusson [ctb],\n Ben Mainwaring [ctb],\n Daniel Malter [ctb],\n George Marsaglia [ctb],\n John Marsaglia [ctb],\n Alina Matei [ctb],\n David Meyer [ctb],\n Weiwen Miao [ctb],\n Giovanni Millo [ctb],\n Yongyi Min [ctb],\n David Mitchell [ctb],\n Franziska Mueller [ctb],\n Markus Naepflin [ctb],\n Daniel Navarro [ctb],\n Henric Nilsson [ctb],\n Klaus Nordhausen [ctb],\n Derek Ogle [ctb],\n Hong Ooi [ctb],\n Nick Parsons [ctb],\n Sandrine Pavoine [ctb],\n Tony Plate [ctb],\n Luke Prendergast [ctb],\n Roland Rapold [ctb],\n William Revelle [ctb],\n Tyler Rinker [ctb],\n Brian D. Ripley [ctb],\n Caroline Rodriguez [ctb],\n Nathan Russell [ctb],\n Nick Sabbe [ctb],\n Ralph Scherer [ctb],\n Venkatraman E. Seshan [ctb],\n Michael Smithson [ctb],\n Greg Snow [ctb],\n Karline Soetaert [ctb],\n Werner A. Stahel [ctb],\n Alec Stephenson [ctb],\n Mark Stevenson [ctb],\n Ralf Stubner [ctb],\n Matthias Templ [ctb],\n Duncan Temple Lang [ctb],\n Terry Therneau [ctb],\n Yves Tille [ctb],\n Luis Torgo [ctb],\n Adrian Trapletti [ctb],\n Joshua Ulrich [ctb],\n Kevin Ushey [ctb],\n Jeremy VanDerWal [ctb],\n Bill Venables [ctb],\n John Verzani [ctb],\n Pablo J. Villacorta Iglesias [ctb],\n Gregory R. Warnes [ctb],\n Stefan Wellek [ctb],\n Hadley Wickham [ctb],\n Rand R. Wilcox [ctb],\n Peter Wolf [ctb],\n Daniel Wollschlaeger [ctb],\n Joseph Wood [ctb],\n Ying Wu [ctb],\n Thomas Yee [ctb],\n Achim Zeileis [ctb]", + "Maintainer": "Andri Signorell ", + "Repository": "RSPM", + "Date/Publication": "2021-11-23 06:20:02 UTC", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-11-05 08:18:14 UTC; unix" + } + }, + "Exact": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "Exact", + "Type": "Package", + "Title": "Unconditional Exact Test", + "Version": "3.1", + "Authors@R": "person(\"Peter\", \"Calhoun\", email=\"calhoun.peter@gmail.com\", role=c(\"aut\", \"cre\"))", + "Author": "Peter Calhoun [aut, cre]", + "Maintainer": "Peter Calhoun ", + "Description": "Performs unconditional exact tests and power calculations for 2x2 contingency tables.\n For comparing two independent proportions, performs Barnard's test (1945)\n using the original CSM test (Barnard, 1947 ),\n using Fisher's p-value referred to as Boschloo's test (1970) ,\n or using a Z-statistic (Suissa and Shuster, 1985, ).\n For comparing two binary proportions, performs unconditional exact test using McNemar's\n Z-statistic (Berger and Sidik, 2003, ),\n using McNemar's conditional p-value, using McNemar's Z-statistic with continuity correction,\n or using CSM test. Calculates confidence intervals for the difference in proportion.\n This package interacts with pre-computed data available through the ExactData R package,\n which is available in a 'drat' repository.\n Install the ExactData R package from GitHub at .\n The ExactData R package is approximately 25 MB.", + "License": "GPL-2", + "Depends": "R (>= 3.5.0)", + "Imports": "graphics, stats, utils, rootSolve", + "Suggests": "ExactData", + "Additional_repositories": "https://pcalhoun1.github.io/drat", + "NeedsCompilation": "no", + "Packaged": "2021-11-26 20:11:13 UTC; pcalh", + "Repository": "RSPM", + "Date/Publication": "2021-11-26 21:40:02 UTC", + "Encoding": "UTF-8", + "Built": "R 4.1.0; ; 2022-11-05 08:14:12 UTC; unix" + } + }, + "Formula": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "Formula", + "Version": "1.2-4", + "Date": "2020-10-16", + "Title": "Extended Model Formulas", + "Description": "Infrastructure for extended formulas with multiple parts on the\n right-hand side and/or multiple responses on the left-hand side\n\t (see ).", + "Authors@R": "c(person(given = \"Achim\", family = \"Zeileis\", role = c(\"aut\", \"cre\"), email = \"Achim.Zeileis@R-project.org\",\n comment = c(ORCID = \"0000-0003-0918-3766\")),\n person(given = \"Yves\", family = \"Croissant\", role = \"aut\", email = \"Yves.Croissant@univ-reunion.fr\"))", + "Depends": "R (>= 2.0.0), stats", + "License": "GPL-2 | GPL-3", + "NeedsCompilation": "no", + "Packaged": "2020-10-16 12:39:27 UTC; zeileis", + "Author": "Achim Zeileis [aut, cre] (),\n Yves Croissant [aut]", + "Maintainer": "Achim Zeileis ", + "Repository": "CRAN", + "Date/Publication": "2020-10-16 13:50:06 UTC", + "Built": "R 4.1.0; ; 2022-11-05 08:12:29 UTC; unix" + } + }, + "Hmisc": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "Hmisc", + "Version": "4.6-0", + "Date": "2021-10-05", + "Title": "Harrell Miscellaneous", + "Authors@R": "\n c(person(given = \"Frank E\",\n family = \"Harrell Jr\",\n role = c(\"aut\", \"cre\"),\n email = \"fh@fharrell.com\",\n comment = c(ORCID = \"0000-0002-8271-5493\")),\n\t\t\tperson(given = \"Charles\",\n\t\t\t family = \"Dupont\",\n\t\t\t\t\t\t role = \"ctb\",\n\t\t\t\t\t\t email = \"charles.dupont@vumc.org\",\n\t\t\t\t\t\t comment = \"contributed several functions and maintains latex functions\"))", + "Maintainer": "Frank E Harrell Jr ", + "Depends": "lattice, survival (>= 3.1-6), Formula, ggplot2 (>= 2.2)", + "Imports": "methods, latticeExtra, cluster, rpart, nnet, foreign, gtable,\ngrid, gridExtra, data.table, htmlTable (>= 1.11.0), viridis,\nhtmltools, base64enc", + "Suggests": "acepack, chron, rms, mice, tables, knitr, plotly (>= 4.5.6),\nrlang, plyr, VGAM", + "Description": "Contains many functions useful for data\n\tanalysis, high-level graphics, utility operations, functions for\n\tcomputing sample size and power, simulation, importing and annotating datasets,\n\timputing missing values, advanced table making, variable clustering,\n\tcharacter string manipulation, conversion of R objects to LaTeX and html code,\n\tand recoding variables.", + "License": "GPL (>= 2)", + "LazyLoad": "Yes", + "URL": "https://hbiostat.org/R/Hmisc/", + "Encoding": "UTF-8", + "RoxygenNote": "7.1.1", + "NeedsCompilation": "yes", + "Packaged": "2021-10-06 18:12:56 UTC; harrelfe", + "Author": "Frank E Harrell Jr [aut, cre] (),\n Charles Dupont [ctb] (contributed several functions and maintains latex\n functions)", + "Repository": "CRAN", + "Date/Publication": "2021-10-07 09:00:02 UTC", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-11-05 08:16:45 UTC; unix" + } + }, + "MASS": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "MASS", + "Priority": "recommended", + "Version": "7.3-57", + "Date": "2022-04-05", + "Revision": "$Rev: 3564 $", + "Depends": "R (>= 3.3.0), grDevices, graphics, stats, utils", + "Imports": "methods", + "Suggests": "lattice, nlme, nnet, survival", + "Authors@R": "c(person(\"Brian\", \"Ripley\", role = c(\"aut\", \"cre\", \"cph\"),\n email = \"ripley@stats.ox.ac.uk\"),\n\t person(\"Bill\", \"Venables\", role = \"ctb\"),\n\t person(c(\"Douglas\", \"M.\"), \"Bates\", role = \"ctb\"),\n\t person(\"Kurt\", \"Hornik\", role = \"trl\",\n comment = \"partial port ca 1998\"),\n\t person(\"Albrecht\", \"Gebhardt\", role = \"trl\",\n comment = \"partial port ca 1998\"),\n\t person(\"David\", \"Firth\", role = \"ctb\"))", + "Description": "Functions and datasets to support Venables and Ripley,\n \"Modern Applied Statistics with S\" (4th edition, 2002).", + "Title": "Support Functions and Datasets for Venables and Ripley's MASS", + "LazyData": "yes", + "ByteCompile": "yes", + "License": "GPL-2 | GPL-3", + "URL": "http://www.stats.ox.ac.uk/pub/MASS4/", + "Contact": "", + "NeedsCompilation": "yes", + "Packaged": "2022-04-19 04:13:16 UTC; ripley", + "Author": "Brian Ripley [aut, cre, cph],\n Bill Venables [ctb],\n Douglas M. Bates [ctb],\n Kurt Hornik [trl] (partial port ca 1998),\n Albrecht Gebhardt [trl] (partial port ca 1998),\n David Firth [ctb]", + "Maintainer": "Brian Ripley ", + "Repository": "RSPM", + "Date/Publication": "2022-04-22 11:45:27 UTC", + "Encoding": "UTF-8", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-11-07 14:29:03 UTC; unix" + } + }, + "Matrix": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "Matrix", + "Version": "1.4-1", + "Date": "2022-03-21", + "Priority": "recommended", + "Title": "Sparse and Dense Matrix Classes and Methods", + "Contact": "Matrix-authors@R-project.org", + "Maintainer": "Martin Maechler ", + "Authors@R": "c(person(\"Douglas\",\"Bates\", role=\"aut\")\n , person(\"Martin\",\"Maechler\", role = c(\"aut\",\"cre\"), email=\"mmaechler+Matrix@gmail.com\",\n comment = c(ORCID = \"0000-0002-8685-9910\"))\n , person(\"Mikael\", \"Jagan\", role=\"aut\",\n comment = \"new 'packedMatrix' class plus subset/diag/.. methods in C\")\n , person(\"Timothy A.\", \"Davis\", role=\"ctb\",\n comment = c(\"SuiteSparse and 'cs' C libraries, notably CHOLMOD, AMD;\n\t\t collaborators listed in\n\t\t\tdir(pattern = '^[A-Z]+[.]txt$', full.names=TRUE,\n\t\t\t system.file('doc', 'SuiteSparse', package='Matrix'))\"))\n , person(\"Jens\", \"Oehlschlägel\", role=\"ctb\", comment=\"initial nearPD()\")\n , person(\"Jason\", \"Riedy\", role=\"ctb\",\n comment = c(\"condest() and onenormest() for octave\",\n \t \t \"Copyright: Regents of the University of California\"))\n , person(\"R Core Team\", role = \"ctb\", comment=\"base R matrix implementation\")\n )", + "Description": "A rich hierarchy of matrix classes, including triangular,\n symmetric, and diagonal matrices, both dense and sparse and with\n pattern, logical and numeric entries. Numerous methods for and\n operations on these matrices, using 'LAPACK' and 'SuiteSparse' libraries.", + "Depends": "R (>= 3.5.0)", + "Imports": "methods, graphics, grid, stats, utils, lattice", + "Suggests": "expm, MASS", + "Enhances": "MatrixModels, graph, SparseM, sfsmisc, igraph, maptools, sp,\nspdep", + "EnhancesNote": "line 2: for \"Rd xrefs\"", + "Encoding": "UTF-8", + "LazyData": "no", + "LazyDataNote": "not possible, since we use data/*.R *and* our classes", + "BuildResaveData": "no", + "License": "GPL (>= 2) | file LICENCE", + "URL": "https://Matrix.R-forge.R-project.org/,\nhttps://Matrix.R-forge.R-project.org/doxygen/", + "BugReports": "https://R-forge.R-project.org/tracker/?atid=294?group_id=61", + "Author": "Douglas Bates [aut],\n Martin Maechler [aut, cre] (),\n Mikael Jagan [aut] (new 'packedMatrix' class plus subset/diag/..\n methods in C),\n Timothy A. Davis [ctb] (SuiteSparse and 'cs' C libraries, notably\n CHOLMOD, AMD; collaborators listed in dir(pattern =\n '^[A-Z]+[.]txt$', full.names=TRUE, system.file('doc',\n 'SuiteSparse', package='Matrix'))),\n Jens Oehlschlägel [ctb] (initial nearPD()),\n Jason Riedy [ctb] (condest() and onenormest() for octave, Copyright:\n Regents of the University of California),\n R Core Team [ctb] (base R matrix implementation)", + "Repository": "RSPM", + "Repository/R-Forge/Project": "matrix", + "Repository/R-Forge/Revision": "3446", + "Repository/R-Forge/DateTimeStamp": "2022-03-21 17:52:00", + "Date/Publication": "2022-03-23 16:30:08 UTC", + "NeedsCompilation": "yes", + "Packaged": "2022-03-21 18:13:03 UTC; rforge", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-11-07 14:37:00 UTC; unix" + } + }, + "R6": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "R6", + "Title": "Encapsulated Classes with Reference Semantics", + "Version": "2.5.1", + "Authors@R": "person(\"Winston\", \"Chang\", role = c(\"aut\", \"cre\"), email = \"winston@stdout.org\")", + "Description": "Creates classes with reference semantics, similar to R's built-in\n reference classes. Compared to reference classes, R6 classes are simpler\n and lighter-weight, and they are not built on S4 classes so they do not\n require the methods package. These classes allow public and private\n members, and they support inheritance, even when the classes are defined in\n different packages.", + "Depends": "R (>= 3.0)", + "Suggests": "testthat, pryr", + "License": "MIT + file LICENSE", + "URL": "https://r6.r-lib.org, https://github.com/r-lib/R6/", + "BugReports": "https://github.com/r-lib/R6/issues", + "RoxygenNote": "7.1.1", + "NeedsCompilation": "no", + "Packaged": "2021-08-06 20:18:46 UTC; winston", + "Author": "Winston Chang [aut, cre]", + "Maintainer": "Winston Chang ", + "Repository": "CRAN", + "Date/Publication": "2021-08-19 14:00:05 UTC", + "Built": "R 4.1.0; ; 2022-09-02 16:39:30 UTC; unix" + } + }, + "RColorBrewer": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "RColorBrewer", + "Version": "1.1-2", + "Date": "2014-12-07", + "Title": "ColorBrewer Palettes", + "Authors@R": "c(person(given = \"Erich\", family = \"Neuwirth\", role = c(\"aut\",\n \"cre\"), email = \"erich.neuwirth@univie.ac.at\"))", + "Author": "Erich Neuwirth [aut, cre]", + "Maintainer": "Erich Neuwirth ", + "Depends": "R (>= 2.0.0)", + "Description": "Provides color schemes for maps (and other graphics)\n designed by Cynthia Brewer as described at http://colorbrewer2.org", + "License": "Apache License 2.0", + "Packaged": "2014-12-06 23:59:42 UTC; neuwirth", + "NeedsCompilation": "no", + "Repository": "CRAN", + "Date/Publication": "2014-12-07 08:28:55", + "Built": "R 4.1.0; ; 2022-09-07 20:17:12 UTC; unix" + } + }, + "RPostgres": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "RPostgres", + "Title": "Rcpp Interface to PostgreSQL", + "Version": "1.4.3", + "Date": "2021-12-20", + "Authors@R": "\n c(person(given = \"Hadley\",\n family = \"Wickham\",\n role = \"aut\"),\n person(given = \"Jeroen\",\n family = \"Ooms\",\n role = \"aut\"),\n person(given = \"Kirill\",\n family = \"M\\u00fcller\",\n role = c(\"aut\", \"cre\"),\n email = \"krlmlr+r@mailbox.org\",\n comment = c(ORCID = \"0000-0002-1416-3412\")),\n person(given = \"RStudio\",\n role = \"cph\"),\n person(given = \"R Consortium\",\n role = \"fnd\"),\n person(given = \"Tomoaki\",\n family = \"Nishiyama\",\n role = \"ctb\",\n comment = \"Code for encoding vectors into strings derived from RPostgreSQL\"))", + "Description": "Fully DBI-compliant Rcpp-backed interface to\n PostgreSQL , an open-source relational\n database.", + "License": "GPL-3", + "URL": "https://rpostgres.r-dbi.org, https://github.com/r-dbi/RPostgres", + "BugReports": "https://github.com/r-dbi/RPostgres/issues", + "Depends": "R (>= 3.1.0)", + "Imports": "bit64, blob (>= 1.2.0), DBI (>= 1.1.0), hms (>= 1.0.0),\nlubridate, methods, Rcpp (>= 1.0.7), withr", + "Suggests": "callr, covr, DBItest (>= 1.7.1), knitr, rmarkdown, testthat", + "LinkingTo": "plogr (>= 0.2.0), Rcpp", + "VignetteBuilder": "knitr", + "Encoding": "UTF-8", + "LazyLoad": "true", + "RoxygenNote": "7.1.2", + "SystemRequirements": "libpq >= 9.0: libpq-dev (deb) or postgresql-devel\n(rpm)", + "Collate": "'PqDriver.R' 'PqConnection.R' 'PqResult.R' 'RPostgres-pkg.R'\n'RcppExports.R' 'Redshift.R' 'dbAppendTable_PqConnection.R'\n'dbBegin_PqConnection.R' 'dbBind_PqResult.R'\n'dbClearResult_PqResult.R' 'dbColumnInfo_PqResult.R'\n'dbCommit_PqConnection.R' 'dbConnect_PqDriver.R'\n'dbConnect_RedshiftDriver.R' 'dbDataType_PqConnection.R'\n'dbDataType_PqDriver.R' 'dbDisconnect_PqConnection.R'\n'dbExistsTable_PqConnection_Id.R'\n'dbExistsTable_PqConnection_character.R' 'dbFetch_PqResult.R'\n'dbGetInfo_PqConnection.R' 'dbGetInfo_PqDriver.R'\n'dbGetRowCount_PqResult.R' 'dbGetRowsAffected_PqResult.R'\n'dbGetStatement_PqResult.R' 'dbHasCompleted_PqResult.R'\n'dbIsValid_PqConnection.R' 'dbIsValid_PqDriver.R'\n'dbIsValid_PqResult.R' 'dbListFields_PqConnection_Id.R'\n'dbListFields_PqConnection_character.R'\n'dbListObjects_PqConnection_ANY.R'\n'dbListTables_PqConnection.R'\n'dbQuoteIdentifier_PqConnection_Id.R'\n'dbQuoteIdentifier_PqConnection_SQL.R'\n'dbQuoteIdentifier_PqConnection_character.R'\n'dbQuoteLiteral_PqConnection.R'\n'dbQuoteString_PqConnection_SQL.R'\n'dbQuoteString_PqConnection_character.R'\n'dbReadTable_PqConnection_character.R'\n'dbRemoveTable_PqConnection_character.R'\n'dbRollback_PqConnection.R' 'dbSendQuery_PqConnection.R'\n'dbUnloadDriver_PqDriver.R'\n'dbUnquoteIdentifier_PqConnection_SQL.R'\n'dbWriteTable_PqConnection_character_data.frame.R' 'default.R'\n'export.R' 'names.R' 'quote.R' 'show_PqConnection.R'\n'sqlData_PqConnection.R' 'tables.R' 'transactions.R' 'utils.R'", + "Config/autostyle/scope": "line_breaks", + "Config/autostyle/strict": "false", + "NeedsCompilation": "yes", + "Packaged": "2021-12-20 04:54:09 UTC; kirill", + "Author": "Hadley Wickham [aut],\n Jeroen Ooms [aut],\n Kirill Müller [aut, cre] (),\n RStudio [cph],\n R Consortium [fnd],\n Tomoaki Nishiyama [ctb] (Code for encoding vectors into strings derived\n from RPostgreSQL)", + "Maintainer": "Kirill Müller ", + "Repository": "CRAN", + "Date/Publication": "2021-12-20 05:30:02 UTC", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2023-05-01 15:38:27 UTC; unix" + } + }, + "RSQLite": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "RSQLite", + "Title": "SQLite Interface for R", + "Version": "2.2.10", + "Date": "2022-02-16", + "Authors@R": "\n c(person(given = \"Kirill\",\n family = \"M\\u00fcller\",\n role = c(\"aut\", \"cre\"),\n email = \"krlmlr+r@mailbox.org\",\n comment = c(ORCID = \"0000-0002-1416-3412\")),\n person(given = \"Hadley\",\n family = \"Wickham\",\n role = \"aut\"),\n person(given = c(\"David\", \"A.\"),\n family = \"James\",\n role = \"aut\"),\n person(given = \"Seth\",\n family = \"Falcon\",\n role = \"aut\"),\n person(given = \"D. Richard\",\n family = \"Hipp\",\n role = \"ctb\",\n comment = \"for the included SQLite sources\"),\n person(given = \"Dan\",\n family = \"Kennedy\",\n role = \"ctb\",\n comment = \"for the included SQLite sources\"),\n person(given = \"Joe\",\n family = \"Mistachkin\",\n role = \"ctb\",\n comment = \"for the included SQLite sources\"),\n person(family = \"SQLite Authors\",\n role = \"ctb\",\n comment = \"for the included SQLite sources\"),\n person(given = \"Liam\",\n family = \"Healy\",\n role = \"ctb\",\n comment = \"for the included SQLite sources\"),\n person(given = \"R Consortium\",\n role = \"fnd\"),\n person(family = \"RStudio\",\n role = \"cph\"))", + "Description": "Embeds the SQLite database engine in R and\n provides an interface compliant with the DBI package. The source for\n the SQLite engine and for various extensions in a recent version is\n included. System libraries will never be consulted because\n this package relies on static linking for the plugins it includes;\n this also ensures a consistent experience across all installations.", + "License": "LGPL (>= 2.1)", + "URL": "https://rsqlite.r-dbi.org, https://github.com/r-dbi/RSQLite", + "BugReports": "https://github.com/r-dbi/RSQLite/issues", + "Depends": "R (>= 3.1.0)", + "Imports": "bit64, blob (>= 1.2.0), DBI (>= 1.1.0), memoise, methods,\npkgconfig, Rcpp (>= 1.0.7)", + "Suggests": "callr, DBItest (>= 1.7.0), gert, gh, knitr, rmarkdown, hms,\nrvest, testthat, xml2", + "LinkingTo": "plogr (>= 0.2.0), Rcpp", + "VignetteBuilder": "knitr", + "Encoding": "UTF-8", + "RoxygenNote": "7.1.2", + "Collate": "'RcppExports.R' 'SQLiteConnection.R'\n'SQLKeywords_SQLiteConnection.R' 'SQLiteDriver.R' 'SQLite.R'\n'SQLiteResult.R' 'coerce.R' 'compatRowNames.R' 'copy.R'\n'datasetsDb.R' 'dbAppendTable_SQLiteConnection.R'\n'dbBeginTransaction.R' 'dbBegin_SQLiteConnection.R'\n'dbBind_SQLiteResult.R' 'dbClearResult_SQLiteResult.R'\n'dbColumnInfo_SQLiteResult.R' 'dbCommit_SQLiteConnection.R'\n'dbConnect_SQLiteConnection.R' 'dbConnect_SQLiteDriver.R'\n'dbDataType_SQLiteConnection.R' 'dbDataType_SQLiteDriver.R'\n'dbDisconnect_SQLiteConnection.R'\n'dbExistsTable_SQLiteConnection_character.R'\n'dbFetch_SQLiteResult.R' 'dbGetException_SQLiteConnection.R'\n'dbGetInfo_SQLiteConnection.R' 'dbGetInfo_SQLiteDriver.R'\n'dbGetPreparedQuery.R'\n'dbGetPreparedQuery_SQLiteConnection_character_data.frame.R'\n'dbGetRowCount_SQLiteResult.R'\n'dbGetRowsAffected_SQLiteResult.R'\n'dbGetStatement_SQLiteResult.R' 'dbHasCompleted_SQLiteResult.R'\n'dbIsValid_SQLiteConnection.R' 'dbIsValid_SQLiteDriver.R'\n'dbIsValid_SQLiteResult.R' 'dbListResults_SQLiteConnection.R'\n'dbListTables_SQLiteConnection.R'\n'dbQuoteIdentifier_SQLiteConnection_SQL.R'\n'dbQuoteIdentifier_SQLiteConnection_character.R'\n'dbReadTable_SQLiteConnection_character.R'\n'dbRemoveTable_SQLiteConnection_character.R'\n'dbRollback_SQLiteConnection.R' 'dbSendPreparedQuery.R'\n'dbSendPreparedQuery_SQLiteConnection_character_data.frame.R'\n'dbSendQuery_SQLiteConnection_character.R'\n'dbUnloadDriver_SQLiteDriver.R'\n'dbUnquoteIdentifier_SQLiteConnection_SQL.R'\n'dbWriteTable_SQLiteConnection_character_character.R'\n'dbWriteTable_SQLiteConnection_character_data.frame.R'\n'db_bind.R' 'deprecated.R' 'export.R' 'fetch_SQLiteResult.R'\n'initExtension.R' 'initRegExp.R'\n'isSQLKeyword_SQLiteConnection_character.R'\n'make.db.names_SQLiteConnection_character.R' 'names.R'\n'pkgconfig.R' 'show_SQLiteConnection.R'\n'sqlData_SQLiteConnection.R' 'table.R' 'transactions.R'\n'utils.R' 'zzz.R'", + "Config/autostyle/scope": "line_breaks", + "Config/autostyle/strict": "false", + "NeedsCompilation": "yes", + "Packaged": "2022-02-16 18:06:54 UTC; kirill", + "Author": "Kirill Müller [aut, cre] (),\n Hadley Wickham [aut],\n David A. James [aut],\n Seth Falcon [aut],\n D. Richard Hipp [ctb] (for the included SQLite sources),\n Dan Kennedy [ctb] (for the included SQLite sources),\n Joe Mistachkin [ctb] (for the included SQLite sources),\n SQLite Authors [ctb] (for the included SQLite sources),\n Liam Healy [ctb] (for the included SQLite sources),\n R Consortium [fnd],\n RStudio [cph]", + "Maintainer": "Kirill Müller ", + "Repository": "CRAN", + "Date/Publication": "2022-02-17 00:50:17 UTC", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-09-02 16:35:28 UTC; unix" + } + }, + "Rcpp": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "Rcpp", + "Title": "Seamless R and C++ Integration", + "Version": "1.0.8", + "Date": "2022-01-11", + "Author": "Dirk Eddelbuettel, Romain Francois, JJ Allaire, Kevin Ushey, Qiang Kou,\n Nathan Russell, Inaki Ucar, Douglas Bates and John Chambers", + "Maintainer": "Dirk Eddelbuettel ", + "Description": "The 'Rcpp' package provides R functions as well as C++ classes which\n offer a seamless integration of R and C++. Many R data types and objects can be\n mapped back and forth to C++ equivalents which facilitates both writing of new\n code as well as easier integration of third-party libraries. Documentation\n about 'Rcpp' is provided by several vignettes included in this package, via the\n 'Rcpp Gallery' site at , the paper by Eddelbuettel and\n Francois (2011, ), the book by Eddelbuettel (2013,\n ) and the paper by Eddelbuettel and Balamuta (2018,\n ); see 'citation(\"Rcpp\")' for details.", + "Imports": "methods, utils", + "Suggests": "tinytest, inline, rbenchmark, pkgKitten (>= 0.1.2)", + "URL": "http://www.rcpp.org, https://dirk.eddelbuettel.com/code/rcpp.html,\nhttps://github.com/RcppCore/Rcpp", + "License": "GPL (>= 2)", + "BugReports": "https://github.com/RcppCore/Rcpp/issues", + "MailingList": "rcpp-devel@lists.r-forge.r-project.org", + "RoxygenNote": "6.1.1", + "NeedsCompilation": "yes", + "Packaged": "2022-01-11 15:50:42 UTC; edd", + "Repository": "CRAN", + "Date/Publication": "2022-01-13 21:22:42 UTC", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-09-02 16:34:36 UTC; unix" + } + }, + "RcppTOML": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "RcppTOML", + "Type": "Package", + "Title": "'Rcpp' Bindings to Parser for Tom's Obvious Markup Language", + "Version": "0.1.7", + "Date": "2020-12-01", + "Author": "Dirk Eddelbuettel", + "Maintainer": "Dirk Eddelbuettel ", + "Description": "The configuration format defined by 'TOML' (which expands to\n \"Tom's Obvious Markup Language\") specifies an excellent format\n (described at ) suitable for both human editing\n as well as the common uses of a machine-readable format. This package\n uses 'Rcpp' to connect the 'cpptoml' parser written by Chase Geigle\n (in C++11) to R.", + "SystemRequirements": "A C++11 compiler; g++ (>= 4.9.*) or newer works.", + "BugReports": "https://github.com/eddelbuettel/rcpptoml/issues", + "URL": "http://dirk.eddelbuettel.com/code/rcpp.toml.html", + "Imports": "Rcpp (>= 0.11.5)", + "Depends": "R (>= 3.3.0)", + "LinkingTo": "Rcpp", + "Suggests": "tinytest", + "License": "GPL (>= 2)", + "NeedsCompilation": "yes", + "Packaged": "2020-12-01 14:05:37 UTC; edd", + "Repository": "CRAN", + "Date/Publication": "2020-12-02 23:00:08 UTC", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-11-05 08:12:54 UTC; unix" + } + }, + "anytime": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "anytime", + "Type": "Package", + "Title": "Anything to 'POSIXct' or 'Date' Converter", + "Version": "0.3.9", + "Date": "2020-08-26", + "Author": "Dirk Eddelbuettel", + "Maintainer": "Dirk Eddelbuettel ", + "Description": "Convert input in any one of character, integer, numeric, factor,\n or ordered type into 'POSIXct' (or 'Date') objects, using one of a number of\n predefined formats, and relying on Boost facilities for date and time parsing.", + "URL": "http://dirk.eddelbuettel.com/code/anytime.html", + "BugReports": "https://github.com/eddelbuettel/anytime/issues", + "License": "GPL (>= 2)", + "Encoding": "UTF-8", + "Depends": "R (>= 3.2.0)", + "Imports": "Rcpp (>= 0.12.9)", + "LinkingTo": "Rcpp (>= 0.12.9), BH", + "Suggests": "tinytest (>= 1.0.0), gettz", + "RoxygenNote": "6.0.1", + "NeedsCompilation": "yes", + "Packaged": "2020-08-26 17:46:45.898451 UTC; edd", + "Repository": "CRAN", + "Date/Publication": "2020-08-27 11:40:21 UTC", + "Built": "R 4.2.3; x86_64-pc-linux-gnu; 2024-08-20 14:08:16 UTC; unix" + } + }, + "askpass": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "askpass", + "Type": "Package", + "Title": "Safe Password Entry for R, Git, and SSH", + "Version": "1.1", + "Authors@R": "person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), \n email = \"jeroen@berkeley.edu\", comment = c(ORCID = \"0000-0002-4035-0289\"))", + "Description": "Cross-platform utilities for prompting the user for credentials or a \n passphrase, for example to authenticate with a server or read a protected key.\n Includes native programs for MacOS and Windows, hence no 'tcltk' is required. \n Password entry can be invoked in two different ways: directly from R via the \n askpass() function, or indirectly as password-entry back-end for 'ssh-agent' \n or 'git-credential' via the SSH_ASKPASS and GIT_ASKPASS environment variables.\n Thereby the user can be prompted for credentials or a passphrase if needed \n when R calls out to git or ssh.", + "License": "MIT + file LICENSE", + "URL": "https://github.com/jeroen/askpass#readme", + "BugReports": "https://github.com/jeroen/askpass/issues", + "Encoding": "UTF-8", + "LazyData": "true", + "Imports": "sys (>= 2.1)", + "RoxygenNote": "6.1.1", + "Suggests": "testthat", + "Language": "en-US", + "NeedsCompilation": "yes", + "Packaged": "2019-01-13 12:08:17 UTC; jeroen", + "Author": "Jeroen Ooms [aut, cre] ()", + "Maintainer": "Jeroen Ooms ", + "Repository": "CRAN", + "Date/Publication": "2019-01-13 12:50:03 UTC", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-09-02 16:47:57 UTC; unix" + } + }, + "assertthat": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "assertthat", + "Title": "Easy Pre and Post Assertions", + "Version": "0.2.1", + "Authors@R": "\n person(\"Hadley\", \"Wickham\", , \"hadley@rstudio.com\", c(\"aut\", \"cre\"))", + "Description": "An extension to stopifnot() that makes it easy to declare \n the pre and post conditions that you code should satisfy, while also \n producing friendly error messages so that your users know what's gone\n wrong.", + "License": "GPL-3", + "Imports": "tools", + "Suggests": "testthat, covr", + "RoxygenNote": "6.0.1", + "Collate": "'assert-that.r' 'on-failure.r' 'assertions-file.r'\n'assertions-scalar.R' 'assertions.r' 'base.r'\n'base-comparison.r' 'base-is.r' 'base-logical.r' 'base-misc.r'\n'utils.r' 'validate-that.R'", + "NeedsCompilation": "no", + "Packaged": "2019-03-21 13:11:01 UTC; hadley", + "Author": "Hadley Wickham [aut, cre]", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN", + "Date/Publication": "2019-03-21 14:53:46 UTC", + "Built": "R 4.1.0; ; 2022-11-05 08:12:51 UTC; unix" + } + }, + "backports": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "backports", + "Type": "Package", + "Title": "Reimplementations of Functions Introduced Since R-3.0.0", + "Version": "1.4.1", + "Authors@R": "c(\n person(\"Michel\", \"Lang\", NULL, \"michellang@gmail.com\",\n role = c(\"cre\", \"aut\"), comment = c(ORCID = \"0000-0001-9754-0393\")),\n person(\"R Core Team\", role = \"aut\"))", + "Maintainer": "Michel Lang ", + "Description": "\n Functions introduced or changed since R v3.0.0 are re-implemented in this\n package. The backports are conditionally exported in order to let R resolve\n the function name to either the implemented backport, or the respective base\n version, if available. Package developers can make use of new functions or\n arguments by selectively importing specific backports to\n support older installations.", + "URL": "https://github.com/r-lib/backports", + "BugReports": "https://github.com/r-lib/backports/issues", + "License": "GPL-2 | GPL-3", + "NeedsCompilation": "yes", + "ByteCompile": "yes", + "Depends": "R (>= 3.0.0)", + "Encoding": "UTF-8", + "RoxygenNote": "7.1.2", + "Packaged": "2021-12-13 10:49:30 UTC; michel", + "Author": "Michel Lang [cre, aut] (),\n R Core Team [aut]", + "Repository": "CRAN", + "Date/Publication": "2021-12-13 11:30:02 UTC", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-10-27 19:03:34 UTC; unix" + } + }, + "base64enc": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "base64enc", + "Version": "0.1-3", + "Title": "Tools for base64 encoding", + "Author": "Simon Urbanek ", + "Maintainer": "Simon Urbanek ", + "Depends": "R (>= 2.9.0)", + "Enhances": "png", + "Description": "This package provides tools for handling base64 encoding. It is more flexible than the orphaned base64 package.", + "License": "GPL-2 | GPL-3", + "URL": "http://www.rforge.net/base64enc", + "NeedsCompilation": "yes", + "Packaged": "2015-02-04 20:31:00 UTC; svnuser", + "Repository": "CRAN", + "Date/Publication": "2015-07-28 08:03:37", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-09-02 16:30:30 UTC; unix" + } + }, + "bit": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "bit", + "Type": "Package", + "Title": "Classes and Methods for Fast Memory-Efficient Boolean Selections", + "Version": "4.0.4", + "Date": "2020-08-03", + "Author": "Jens Oehlschlägel [aut, cre], Brian Ripley [ctb]", + "Maintainer": "Jens Oehlschlägel ", + "Depends": "R (>= 2.9.2)", + "Suggests": "testthat (>= 0.11.0), roxygen2, knitr, rmarkdown,\nmicrobenchmark, bit64 (>= 4.0.0), ff (>= 4.0.0)", + "Description": "Provided are classes for boolean and skewed boolean vectors,\n fast boolean methods, fast unique and non-unique integer sorting,\n fast set operations on sorted and unsorted sets of integers, and\n foundations for ff (range index, compression, chunked processing).", + "License": "GPL-2 | GPL-3", + "LazyLoad": "yes", + "ByteCompile": "yes", + "Encoding": "UTF-8", + "URL": "https://github.com/truecluster/bit", + "VignetteBuilder": "knitr, rmarkdown", + "RoxygenNote": "7.1.0.9000", + "NeedsCompilation": "yes", + "Packaged": "2020-08-03 12:14:34 UTC; jo", + "Repository": "CRAN", + "Date/Publication": "2020-08-04 04:20:08 UTC", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-09-02 16:33:29 UTC; unix" + } + }, + "bit64": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "bit64", + "Type": "Package", + "Title": "A S3 Class for Vectors of 64bit Integers", + "Version": "4.0.5", + "Date": "2020-08-29", + "Author": "Jens Oehlschlägel [aut, cre], Leonardo Silvestri [ctb]", + "Maintainer": "Jens Oehlschlägel ", + "Depends": "R (>= 3.0.1), bit (>= 4.0.0), utils, methods, stats", + "Description": "\n Package 'bit64' provides serializable S3 atomic 64bit (signed) integers. \n These are useful for handling database keys and exact counting in +-2^63.\n WARNING: do not use them as replacement for 32bit integers, integer64 are not\n supported for subscripting by R-core and they have different semantics when \n combined with double, e.g. integer64 + double => integer64. \n Class integer64 can be used in vectors, matrices, arrays and data.frames. \n Methods are available for coercion from and to logicals, integers, doubles, \n characters and factors as well as many elementwise and summary functions. \n Many fast algorithmic operations such as 'match' and 'order' support inter-\n active data exploration and manipulation and optionally leverage caching.", + "License": "GPL-2 | GPL-3", + "LazyLoad": "yes", + "ByteCompile": "yes", + "URL": "https://github.com/truecluster/bit64", + "Encoding": "UTF-8", + "Repository": "CRAN", + "Repository/R-Forge/Project": "ff", + "Repository/R-Forge/Revision": "177", + "Repository/R-Forge/DateTimeStamp": "2018-08-17 17:45:18", + "Date/Publication": "2020-08-30 07:20:02 UTC", + "NeedsCompilation": "yes", + "Packaged": "2020-08-29 10:56:45 UTC; jo", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-09-02 16:33:39 UTC; unix" + } + }, + "blob": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "blob", + "Title": "A Simple S3 Class for Representing Vectors of Binary Data\n('BLOBS')", + "Version": "1.2.2", + "Authors@R": "\n c(person(given = \"Hadley\",\n family = \"Wickham\",\n role = \"aut\"),\n person(given = \"Kirill\",\n family = \"Müller\",\n role = \"cre\",\n email = \"krlmlr+r@mailbox.org\"),\n person(given = \"RStudio\",\n role = \"cph\"))", + "Description": "R's raw vector is useful for storing a single\n binary object. What if you want to put a vector of them in a data\n frame? The 'blob' package provides the blob object, a list of raw\n vectors, suitable for use as a column in data frame.", + "License": "MIT + file LICENSE", + "URL": "https://blob.tidyverse.org, https://github.com/tidyverse/blob", + "BugReports": "https://github.com/tidyverse/blob/issues", + "Imports": "methods, rlang, vctrs (>= 0.2.1)", + "Suggests": "covr, crayon, pillar (>= 1.2.1), testthat", + "Encoding": "UTF-8", + "RoxygenNote": "7.0.2", + "NeedsCompilation": "no", + "Packaged": "2021-07-23 02:39:55 UTC; kirill", + "Author": "Hadley Wickham [aut],\n Kirill Müller [cre],\n RStudio [cph]", + "Maintainer": "Kirill Müller ", + "Repository": "CRAN", + "Date/Publication": "2021-07-23 05:20:08 UTC", + "Built": "R 4.1.0; ; 2022-09-02 16:34:23 UTC; unix" + } + }, + "boot": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "boot", + "Priority": "recommended", + "Version": "1.3-28.1", + "Date": "2022-11-21", + "Authors@R": "c(person(\"Angelo\", \"Canty\", role = \"aut\",\n\t email = \"cantya@mcmaster.ca\"),\n person(\"Brian\", \"Ripley\", role = c(\"aut\", \"trl\", \"cre\"),\n email = \"ripley@stats.ox.ac.uk\",\n\t\t comment = \"author of parallel support\"))", + "Maintainer": "Brian Ripley ", + "Note": "Maintainers are not available to give advice on using a package\nthey did not author.", + "Description": "Functions and datasets for bootstrapping from the\n book \"Bootstrap Methods and Their Application\" by A. C. Davison and \n D. V. Hinkley (1997, CUP), originally written by Angelo Canty for S.", + "Title": "Bootstrap Functions (Originally by Angelo Canty for S)", + "Depends": "R (>= 3.0.0), graphics, stats", + "Suggests": "MASS, survival", + "LazyData": "yes", + "ByteCompile": "yes", + "License": "Unlimited", + "NeedsCompilation": "no", + "Packaged": "2022-11-21 22:19:52 UTC; ripley", + "Author": "Angelo Canty [aut],\n Brian Ripley [aut, trl, cre] (author of parallel support)", + "Repository": "CRAN", + "Date/Publication": "2022-11-22 07:05:25 UTC", + "Built": "R 4.2.3; ; 2023-10-03 23:18:53 UTC; unix" + } + }, + "bslib": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "bslib", + "Title": "Custom 'Bootstrap' 'Sass' Themes for 'shiny' and 'rmarkdown'", + "Version": "0.3.1", + "Authors@R": "c(\n person(\"Carson\", \"Sievert\", role = c(\"aut\", \"cre\"), email = \"carson@rstudio.com\", comment = c(ORCID = \"0000-0002-4958-2844\")),\n person(\"Joe\", \"Cheng\", role = \"aut\", email = \"joe@rstudio.com\"),\n person(family = \"RStudio\", role = \"cph\"),\n person(family = \"Bootstrap contributors\", role = \"ctb\",\n comment = \"Bootstrap library\"),\n person(family = \"Twitter, Inc\", role = \"cph\",\n comment = \"Bootstrap library\"),\n person(\"Javi\", \"Aguilar\", role = c(\"ctb\", \"cph\"),\n comment = \"Bootstrap colorpicker library\"),\n person(\"Thomas\", \"Park\", role = c(\"ctb\", \"cph\"),\n comment = \"Bootswatch library\"),\n person(family = \"PayPal\", role = c(\"ctb\", \"cph\"),\n comment = \"Bootstrap accessibility plugin\")\n )", + "Description": "Simplifies custom 'CSS' styling of both 'shiny' and 'rmarkdown' via 'Bootstrap' 'Sass'. Supports both 'Bootstrap' 3 and 4 as well as their various 'Bootswatch' themes. An interactive widget is also provided for previewing themes in real time.", + "Depends": "R (>= 2.10)", + "Imports": "grDevices, htmltools (>= 0.5.2), jsonlite, sass (>= 0.4.0),\njquerylib (>= 0.1.3), rlang", + "Suggests": "shiny (>= 1.6.0), rmarkdown (>= 2.7), thematic, knitr,\ntestthat, withr, rappdirs, curl, magrittr", + "License": "MIT + file LICENSE", + "Encoding": "UTF-8", + "RoxygenNote": "7.1.2", + "Config/testthat/edition": "3", + "Collate": "'bootswatch.R' 'bs-current-theme.R' 'bs-dependencies.R'\n'bs-global.R' 'bs-remove.R' 'bs-theme-layers.R' 'utils.R'\n'bs-theme-preview.R' 'bs-theme-update.R' 'bs-theme.R'\n'deprecated.R' 'files.R' 'imports.R' 'nav-items.R'\n'nav-update.R' 'navs-legacy.R' 'navs.R' 'onLoad.R' 'page.R'\n'precompiled.R' 'print.R' 'shiny-devmode.R' 'utils-shiny.R'\n'utils-tags.R' 'version-default.R' 'versions.R'", + "URL": "https://rstudio.github.io/bslib/, https://github.com/rstudio/bslib", + "BugReports": "https://github.com/rstudio/bslib/issues", + "Config/Needs/website": "rsconnect, renv, r-lib/pkgdown, apreshill/quillt", + "NeedsCompilation": "no", + "Packaged": "2021-10-06 14:12:58 UTC; cpsievert", + "Author": "Carson Sievert [aut, cre] (),\n Joe Cheng [aut],\n RStudio [cph],\n Bootstrap contributors [ctb] (Bootstrap library),\n Twitter, Inc [cph] (Bootstrap library),\n Javi Aguilar [ctb, cph] (Bootstrap colorpicker library),\n Thomas Park [ctb, cph] (Bootswatch library),\n PayPal [ctb, cph] (Bootstrap accessibility plugin)", + "Maintainer": "Carson Sievert ", + "Repository": "CRAN", + "Date/Publication": "2021-10-06 15:10:05 UTC", + "Built": "R 4.1.0; ; 2022-09-02 16:43:23 UTC; unix" + } + }, + "cachem": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "cachem", + "Version": "1.0.6", + "Title": "Cache R Objects with Automatic Pruning", + "Description": "Key-value stores with automatic pruning. Caches can limit\n either their total size or the age of the oldest object (or both),\n automatically pruning objects to maintain the constraints.", + "Authors@R": "c(\n person(\"Winston\", \"Chang\", , \"winston@rstudio.com\", c(\"aut\", \"cre\")),\n person(family = \"RStudio\", role = c(\"cph\", \"fnd\")))", + "License": "MIT + file LICENSE", + "Encoding": "UTF-8", + "ByteCompile": "true", + "URL": "https://cachem.r-lib.org/, https://github.com/r-lib/cachem", + "Imports": "rlang, fastmap", + "Suggests": "testthat", + "RoxygenNote": "7.1.1", + "NeedsCompilation": "yes", + "Packaged": "2021-08-19 21:07:46 UTC; barret", + "Author": "Winston Chang [aut, cre],\n RStudio [cph, fnd]", + "Maintainer": "Winston Chang ", + "Repository": "CRAN", + "Date/Publication": "2021-08-19 21:30:02 UTC", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-09-02 16:43:44 UTC; unix" + } + }, + "cellranger": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "cellranger", + "Title": "Translate Spreadsheet Cell Ranges to Rows and Columns", + "Version": "1.1.0", + "Authors@R": "c(\n person(\"Jennifer\", \"Bryan\", , \"jenny@stat.ubc.ca\", c(\"cre\", \"aut\")),\n person(\"Hadley\", \"Wickham\", , \"hadley@rstudio.com\", \"ctb\")\n )", + "Description": "Helper functions to work with spreadsheets and the \"A1:D10\" style\n of cell range specification.", + "Depends": "R (>= 3.0.0)", + "License": "MIT + file LICENSE", + "LazyData": "true", + "URL": "https://github.com/rsheets/cellranger", + "BugReports": "https://github.com/rsheets/cellranger/issues", + "Suggests": "covr, testthat (>= 1.0.0), knitr, rmarkdown", + "RoxygenNote": "5.0.1.9000", + "VignetteBuilder": "knitr", + "Imports": "rematch, tibble", + "NeedsCompilation": "no", + "Packaged": "2016-07-26 06:50:00 UTC; jenny", + "Author": "Jennifer Bryan [cre, aut],\n Hadley Wickham [ctb]", + "Maintainer": "Jennifer Bryan ", + "Repository": "CRAN", + "Date/Publication": "2016-07-27 03:17:48", + "Built": "R 4.1.0; ; 2022-11-05 08:14:05 UTC; unix" + } + }, + "checkmate": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "checkmate", + "Type": "Package", + "Title": "Fast and Versatile Argument Checks", + "Description": "Tests and assertions to perform frequent argument checks. A\n substantial part of the package was written in C to minimize any worries\n about execution time overhead.", + "Version": "2.0.0", + "Authors@R": "c(\n person(\"Michel\", \"Lang\", NULL, \"michellang@gmail.com\",\n role = c(\"cre\", \"aut\"), comment = c(ORCID = \"0000-0001-9754-0393\")),\n person(\"Bernd\", \"Bischl\", NULL, \"bernd_bischl@gmx.net\", role = \"ctb\")\n )", + "URL": "https://github.com/mllg/checkmate", + "URLNote": "https://github.com/mllg/checkmate", + "BugReports": "https://github.com/mllg/checkmate/issues", + "NeedsCompilation": "yes", + "ByteCompile": "yes", + "Encoding": "UTF-8", + "Depends": "R (>= 3.0.0)", + "Imports": "backports (>= 1.1.0), utils", + "Suggests": "R6, fastmatch, data.table (>= 1.9.8), devtools, ggplot2,\nknitr, magrittr, microbenchmark, rmarkdown, testthat (>=\n0.11.0), tinytest (>= 1.1.0), tibble", + "License": "BSD_3_clause + file LICENSE", + "VignetteBuilder": "knitr", + "RoxygenNote": "7.0.2", + "Collate": "'AssertCollection.R' 'allMissing.R' 'anyInfinite.R'\n'anyMissing.R' 'anyNaN.R' 'asInteger.R' 'assert.R' 'helper.R'\n'makeExpectation.R' 'makeTest.R' 'makeAssertion.R'\n'checkAccess.R' 'checkArray.R' 'checkAtomic.R'\n'checkAtomicVector.R' 'checkCharacter.R' 'checkChoice.R'\n'checkClass.R' 'checkComplex.R' 'checkCount.R'\n'checkDataFrame.R' 'checkDataTable.R' 'checkDate.R'\n'checkDirectoryExists.R' 'checkDisjunct.R' 'checkDouble.R'\n'checkEnvironment.R' 'checkFALSE.R' 'checkFactor.R'\n'checkFileExists.R' 'checkFlag.R' 'checkFormula.R'\n'checkFunction.R' 'checkInt.R' 'checkInteger.R'\n'checkIntegerish.R' 'checkList.R' 'checkLogical.R'\n'checkMatrix.R' 'checkMultiClass.R' 'checkNamed.R'\n'checkNames.R' 'checkNull.R' 'checkNumber.R' 'checkNumeric.R'\n'checkOS.R' 'checkPOSIXct.R' 'checkPathForOutput.R' 'checkR6.R'\n'checkRaw.R' 'checkScalar.R' 'checkScalarNA.R'\n'checkSetEqual.R' 'checkString.R' 'checkSubset.R' 'checkTRUE.R'\n'checkTibble.R' 'checkVector.R' 'coalesce.R' 'isIntegerish.R'\n'matchArg.R' 'qassert.R' 'qassertr.R' 'vname.R' 'wfwl.R'\n'zzz.R'", + "Packaged": "2020-02-05 12:51:29 UTC; michel", + "Author": "Michel Lang [cre, aut] (),\n Bernd Bischl [ctb]", + "Maintainer": "Michel Lang ", + "Repository": "CRAN", + "Date/Publication": "2020-02-06 01:00:13 UTC", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-10-27 19:04:31 UTC; unix" + } + }, + "cicerone": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "cicerone", + "Title": "Provide Tours of 'Shiny' Applications", + "Version": "1.0.4", + "Date": "2021-01-10", + "Authors@R": "\n c(\n person(given = \"John\",\n family = \"Coene\",\n role = c(\"aut\", \"cre\"),\n email = \"jcoenep@gmail.com\",\n comment = c(ORCID = \"0000-0002-6637-4107\")),\n person(given = \"Etienne\", \n family = \"Bacher\", \n role = \"ctb\", \n email = \"etienne.bacher@protonmail.com\")\n )", + "Description": "Provide step by step guided tours of 'Shiny' applications.", + "License": "MIT + file LICENSE", + "Encoding": "UTF-8", + "LazyData": "true", + "Imports": "R6, shiny, assertthat", + "RoxygenNote": "7.1.1.9000", + "URL": "https://cicerone.john-coene.com/", + "BugReports": "https://github.com/JohnCoene/cicerone/issues", + "NeedsCompilation": "no", + "Packaged": "2021-01-10 22:10:19 UTC; jp", + "Author": "John Coene [aut, cre] (),\n Etienne Bacher [ctb]", + "Maintainer": "John Coene ", + "Repository": "RSPM", + "Date/Publication": "2021-01-10 23:00:02 UTC", + "Built": "R 4.1.0; ; 2023-01-11 20:50:05 UTC; unix" + } + }, + "class": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "class", + "Priority": "recommended", + "Version": "7.3-21", + "Date": "2023-01-23", + "Depends": "R (>= 3.0.0), stats, utils", + "Imports": "MASS", + "Authors@R": "c(person(\"Brian\", \"Ripley\", role = c(\"aut\", \"cre\", \"cph\"),\n email = \"ripley@stats.ox.ac.uk\"),\n person(\"William\", \"Venables\", role = \"cph\"))", + "Description": "Various functions for classification, including k-nearest\n neighbour, Learning Vector Quantization and Self-Organizing Maps.", + "Title": "Functions for Classification", + "ByteCompile": "yes", + "License": "GPL-2 | GPL-3", + "URL": "http://www.stats.ox.ac.uk/pub/MASS4/", + "NeedsCompilation": "yes", + "Packaged": "2023-01-23 06:55:04 UTC; ripley", + "Author": "Brian Ripley [aut, cre, cph],\n William Venables [cph]", + "Maintainer": "Brian Ripley ", + "Repository": "CRAN", + "Date/Publication": "2023-01-23 07:10:12 UTC", + "Built": "R 4.2.3; x86_64-pc-linux-gnu; 2023-10-03 23:19:14 UTC; unix" + } + }, + "cli": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "cli", + "Title": "Helpers for Developing Command Line Interfaces", + "Version": "3.6.2", + "Authors@R": "c(\n person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")),\n person(\"Hadley\", \"Wickham\", role = \"ctb\"),\n person(\"Kirill\", \"Müller\", role = \"ctb\"),\n person(\"Salim\", \"Brüggemann\", , \"salim-b@pm.me\", role = \"ctb\",\n comment = c(ORCID = \"0000-0002-5329-5987\")),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", + "Description": "A suite of tools to build attractive command line interfaces\n ('CLIs'), from semantic elements: headings, lists, alerts, paragraphs,\n etc. Supports custom themes via a 'CSS'-like language. It also\n contains a number of lower level 'CLI' elements: rules, boxes, trees,\n and 'Unicode' symbols with 'ASCII' alternatives. It support ANSI\n colors and text styles as well.", + "License": "MIT + file LICENSE", + "URL": "https://cli.r-lib.org, https://github.com/r-lib/cli", + "BugReports": "https://github.com/r-lib/cli/issues", + "Depends": "R (>= 3.4)", + "Imports": "utils", + "Suggests": "callr, covr, crayon, digest, glue (>= 1.6.0), grDevices,\nhtmltools, htmlwidgets, knitr, methods, mockery, processx, ps\n(>= 1.3.4.9000), rlang (>= 1.0.2.9003), rmarkdown, rprojroot,\nrstudioapi, testthat, tibble, whoami, withr", + "Config/Needs/website": "r-lib/asciicast, bench, brio, cpp11, decor, desc,\nfansi, prettyunits, sessioninfo, tidyverse/tidytemplate,\nusethis, vctrs", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.2.3", + "NeedsCompilation": "yes", + "Packaged": "2023-12-10 22:38:10 UTC; gaborcsardi", + "Author": "Gábor Csárdi [aut, cre],\n Hadley Wickham [ctb],\n Kirill Müller [ctb],\n Salim Brüggemann [ctb] (),\n Posit Software, PBC [cph, fnd]", + "Maintainer": "Gábor Csárdi ", + "Repository": "CRAN", + "Date/Publication": "2023-12-11 07:40:13 UTC", + "Built": "R 4.2.3; x86_64-pc-linux-gnu; 2024-05-08 13:31:22 UTC; unix" + } + }, + "clipr": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Type": "Package", + "Package": "clipr", + "Title": "Read and Write from the System Clipboard", + "Version": "0.8.0", + "Authors@R": "c(\n person(\"Matthew\", \"Lincoln\", , \"matthew.d.lincoln@gmail.com\", role = c(\"aut\", \"cre\"),\n comment = c(ORCID = \"0000-0002-4387-3384\")),\n person(\"Louis\", \"Maddox\", role = \"ctb\"),\n person(\"Steve\", \"Simpson\", role = \"ctb\"),\n person(\"Jennifer\", \"Bryan\", role = \"ctb\")\n )", + "Description": "Simple utility functions to read from and write to\n the Windows, OS X, and X11 clipboards.", + "License": "GPL-3", + "URL": "https://github.com/mdlincoln/clipr,\nhttp://matthewlincoln.net/clipr/", + "BugReports": "https://github.com/mdlincoln/clipr/issues", + "Imports": "utils", + "Suggests": "covr, knitr, rmarkdown, rstudioapi (>= 0.5), testthat (>=\n2.0.0)", + "VignetteBuilder": "knitr", + "Encoding": "UTF-8", + "Language": "en-US", + "RoxygenNote": "7.1.2", + "SystemRequirements": "xclip (https://github.com/astrand/xclip) or xsel\n(http://www.vergenet.net/~conrad/software/xsel/) for accessing\nthe X11 clipboard, or wl-clipboard\n(https://github.com/bugaevc/wl-clipboard) for systems using\nWayland.", + "NeedsCompilation": "no", + "Packaged": "2022-02-19 02:20:21 UTC; mlincoln", + "Author": "Matthew Lincoln [aut, cre] (),\n Louis Maddox [ctb],\n Steve Simpson [ctb],\n Jennifer Bryan [ctb]", + "Maintainer": "Matthew Lincoln ", + "Repository": "CRAN", + "Date/Publication": "2022-02-22 00:58:45 UTC", + "Built": "R 4.1.0; ; 2022-10-17 18:04:07 UTC; unix" + } + }, + "cluster": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "cluster", + "Version": "2.1.4", + "Date": "2022-08-19", + "Priority": "recommended", + "Title": "\"Finding Groups in Data\": Cluster Analysis Extended Rousseeuw et\nal.", + "Description": "Methods for Cluster analysis. Much extended the original from\n\tPeter Rousseeuw, Anja Struyf and Mia Hubert,\n\tbased on Kaufman and Rousseeuw (1990) \"Finding Groups in Data\".", + "Maintainer": "Martin Maechler ", + "Authors@R": "c(person(\"Martin\",\"Maechler\", role = c(\"aut\",\"cre\"),\n\t email=\"maechler@stat.math.ethz.ch\", comment = c(ORCID = \"0000-0002-8685-9910\"))\n ,person(\"Peter\", \"Rousseeuw\", role=\"aut\", email=\"peter.rousseeuw@kuleuven.be\",\n comment = c(\"Fortran original\", ORCID = \"0000-0002-3807-5353\"))\n ,person(\"Anja\", \"Struyf\", role=\"aut\", comment= \"S original\")\n ,person(\"Mia\", \"Hubert\", role=\"aut\", email= \"Mia.Hubert@uia.ua.ac.be\",\n comment = c(\"S original\", ORCID = \"0000-0001-6398-4850\"))\n ,person(\"Kurt\", \"Hornik\", role=c(\"trl\", \"ctb\"),\n email=\"Kurt.Hornik@R-project.org\",\n comment=c(\"port to R; maintenance(1999-2000)\", ORCID=\"0000-0003-4198-9911\"))\n ,person(\"Matthias\", \"Studer\", role=\"ctb\")\n ,person(\"Pierre\", \"Roudier\", role=\"ctb\")\n ,person(\"Juan\", \"Gonzalez\", role=\"ctb\")\n ,person(\"Kamil\", \"Kozlowski\", role=\"ctb\")\n ,person(\"Erich\", \"Schubert\", role=\"ctb\", comment = c(\"fastpam options for pam()\",\n ORCID = \"0000-0001-9143-4880\"))\n ,person(\"Keefe\", \"Murphy\", role=\"ctb\", comment = \"volume.ellipsoid({d >= 3})\")\n )", + "Depends": "R (>= 3.5.0)", + "Imports": "graphics, grDevices, stats, utils", + "Suggests": "MASS, Matrix", + "SuggestsNote": "MASS: two examples using cov.rob() and mvrnorm(); Matrix\ntools for testing", + "LazyLoad": "yes", + "LazyData": "yes", + "ByteCompile": "yes", + "BuildResaveData": "no", + "License": "GPL (>= 2)", + "URL": "https://svn.r-project.org/R-packages/trunk/cluster/", + "NeedsCompilation": "yes", + "Packaged": "2022-08-19 13:31:31 UTC; maechler", + "Author": "Martin Maechler [aut, cre] (),\n Peter Rousseeuw [aut] (Fortran original,\n ),\n Anja Struyf [aut] (S original),\n Mia Hubert [aut] (S original, ),\n Kurt Hornik [trl, ctb] (port to R; maintenance(1999-2000),\n ),\n Matthias Studer [ctb],\n Pierre Roudier [ctb],\n Juan Gonzalez [ctb],\n Kamil Kozlowski [ctb],\n Erich Schubert [ctb] (fastpam options for pam(),\n ),\n Keefe Murphy [ctb] (volume.ellipsoid({d >= 3}))", + "Repository": "CRAN", + "Date/Publication": "2022-08-22 10:10:02 UTC", + "Built": "R 4.2.3; x86_64-pc-linux-gnu; 2023-10-03 23:18:56 UTC; unix" + } + }, + "colorspace": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "colorspace", + "Version": "2.0-3", + "Date": "2022-02-19", + "Title": "A Toolbox for Manipulating and Assessing Colors and Palettes", + "Authors@R": "c(person(given = \"Ross\", family = \"Ihaka\", role = \"aut\", email = \"ihaka@stat.auckland.ac.nz\"),\n person(given = \"Paul\", family = \"Murrell\", role = \"aut\", email = \"paul@stat.auckland.ac.nz\",\n comment = c(ORCID = \"0000-0002-3224-8858\")),\n person(given = \"Kurt\", family = \"Hornik\", role = \"aut\", email = \"Kurt.Hornik@R-project.org\",\n\t\t comment = c(ORCID = \"0000-0003-4198-9911\")),\n person(given = c(\"Jason\", \"C.\"), family = \"Fisher\", role = \"aut\", email = \"jfisher@usgs.gov\",\n comment = c(ORCID = \"0000-0001-9032-8912\")),\n person(given = \"Reto\", family = \"Stauffer\", role = \"aut\", email = \"Reto.Stauffer@uibk.ac.at\",\n comment = c(ORCID = \"0000-0002-3798-5507\")),\n person(given = c(\"Claus\", \"O.\"), family = \"Wilke\", role = \"aut\", email = \"wilke@austin.utexas.edu\",\n comment = c(ORCID = \"0000-0002-7470-9261\")),\n person(given = c(\"Claire\", \"D.\"), family = \"McWhite\", role = \"aut\", email = \"claire.mcwhite@utmail.utexas.edu\",\n comment = c(ORCID = \"0000-0001-7346-3047\")),\n person(given = \"Achim\", family = \"Zeileis\", role = c(\"aut\", \"cre\"), email = \"Achim.Zeileis@R-project.org\",\n comment = c(ORCID = \"0000-0003-0918-3766\")))", + "Description": "Carries out mapping between assorted color spaces including RGB, HSV, HLS,\n CIEXYZ, CIELUV, HCL (polar CIELUV), CIELAB, and polar CIELAB.\n\t Qualitative, sequential, and diverging color palettes based on HCL colors\n\t are provided along with corresponding ggplot2 color scales.\n\t Color palette choice is aided by an interactive app (with either a Tcl/Tk\n\t or a shiny graphical user interface) and shiny apps with an HCL color picker and a\n\t color vision deficiency emulator. Plotting functions for displaying\n\t and assessing palettes include color swatches, visualizations of the\n\t HCL space, and trajectories in HCL and/or RGB spectrum. Color manipulation\n\t functions include: desaturation, lightening/darkening, mixing, and\n\t simulation of color vision deficiencies (deutanomaly, protanomaly, tritanomaly).\n\t Details can be found on the project web page at \n\t and in the accompanying scientific paper: Zeileis et al. (2020, Journal of Statistical\n\t Software, ).", + "Depends": "R (>= 3.0.0), methods", + "Imports": "graphics, grDevices, stats", + "Suggests": "datasets, utils, KernSmooth, MASS, kernlab, mvtnorm, vcd,\ntcltk, shiny, shinyjs, ggplot2, dplyr, scales, grid, png, jpeg,\nknitr, rmarkdown, RColorBrewer, rcartocolor, scico, viridis,\nwesanderson", + "VignetteBuilder": "knitr", + "License": "BSD_3_clause + file LICENSE", + "URL": "https://colorspace.R-Forge.R-project.org/, https://hclwizard.org/", + "BugReports": "https://colorspace.R-Forge.R-project.org/contact.html", + "LazyData": "yes", + "RoxygenNote": "7.1.2", + "NeedsCompilation": "yes", + "Packaged": "2022-02-19 11:47:52 UTC; zeileis", + "Author": "Ross Ihaka [aut],\n Paul Murrell [aut] (),\n Kurt Hornik [aut] (),\n Jason C. Fisher [aut] (),\n Reto Stauffer [aut] (),\n Claus O. Wilke [aut] (),\n Claire D. McWhite [aut] (),\n Achim Zeileis [aut, cre] ()", + "Maintainer": "Achim Zeileis ", + "Repository": "CRAN", + "Date/Publication": "2022-02-21 09:50:02 UTC", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-09-07 20:16:03 UTC; unix" + } + }, + "commonmark": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "commonmark", + "Type": "Package", + "Title": "High Performance CommonMark and Github Markdown Rendering in R", + "Version": "1.9.1", + "Authors@R": "c(\n person(\"Jeroen\", \"Ooms\", ,\"jeroen@berkeley.edu\", role = c(\"aut\", \"cre\"),\n comment = c(ORCID = \"0000-0002-4035-0289\")),\n person(\"John MacFarlane\", role = \"cph\", comment = \"Author of cmark\"))", + "URL": "https://docs.ropensci.org/commonmark/\nhttps://r-lib.r-universe.dev/commonmark\nhttps://github.github.com/gfm/ (spec)", + "BugReports": "https://github.com/r-lib/commonmark/issues", + "Description": "The CommonMark specification defines a rationalized version of markdown\n syntax. This package uses the 'cmark' reference implementation for converting\n markdown text into various formats including html, latex and groff man. In\n addition it exposes the markdown parse tree in xml format. Also includes opt-in\n support for GFM extensions including tables, autolinks, and strikethrough text.", + "License": "BSD_2_clause + file LICENSE", + "Suggests": "curl, testthat, xml2", + "RoxygenNote": "7.2.3", + "Language": "en-US", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Packaged": "2024-01-30 11:29:56 UTC; jeroen", + "Author": "Jeroen Ooms [aut, cre] (),\n John MacFarlane [cph] (Author of cmark)", + "Maintainer": "Jeroen Ooms ", + "Repository": "CRAN", + "Date/Publication": "2024-01-30 12:40:02 UTC", + "Built": "R 4.2.3; x86_64-pc-linux-gnu; 2024-03-27 19:14:07 UTC; unix" + } + }, + "cowplot": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "cowplot", + "Title": "Streamlined Plot Theme and Plot Annotations for 'ggplot2'", + "Version": "1.1.3", + "Authors@R": "\n person(\n given = \"Claus O.\",\n family = \"Wilke\",\n role = c(\"aut\", \"cre\"),\n email = \"wilke@austin.utexas.edu\",\n comment = c(ORCID = \"0000-0002-7470-9261\")\n )", + "Description": "\n Provides various features that help with creating publication-quality figures\n with 'ggplot2', such as a set of themes, functions to align plots and arrange\n them into complex compound figures, and functions that make it easy to annotate\n plots and or mix plots with images. The package was originally written for\n internal use in the Wilke lab, hence the name (Claus O. Wilke's plot package).\n It has also been used extensively in the book Fundamentals of Data\n Visualization.", + "URL": "https://wilkelab.org/cowplot/", + "BugReports": "https://github.com/wilkelab/cowplot/issues", + "Depends": "R (>= 3.5.0)", + "Imports": "ggplot2 (>= 3.4.0), grid, gtable, grDevices, methods, rlang,\nscales", + "License": "GPL-2", + "Suggests": "Cairo, covr, dplyr, forcats, gridGraphics (>= 0.4-0), knitr,\nlattice, magick, maps, PASWR, patchwork, rmarkdown, ragg,\ntestthat (>= 1.0.0), tidyr, vdiffr (>= 0.3.0), VennDiagram", + "VignetteBuilder": "knitr", + "Collate": "'add_sub.R' 'align_plots.R' 'as_grob.R' 'as_gtable.R'\n'axis_canvas.R' 'cowplot.R' 'draw.R' 'get_plot_component.R'\n'get_axes.R' 'get_titles.R' 'get_legend.R' 'get_panel.R'\n'gtable.R' 'key_glyph.R' 'plot_grid.R' 'save.R'\n'set_null_device.R' 'setup.R' 'stamp.R' 'themes.R'\n'utils_ggplot2.R'", + "RoxygenNote": "7.2.3", + "Encoding": "UTF-8", + "NeedsCompilation": "no", + "Packaged": "2024-01-22 21:32:03 UTC; clauswilke", + "Author": "Claus O. Wilke [aut, cre] ()", + "Maintainer": "Claus O. Wilke ", + "Repository": "CRAN", + "Date/Publication": "2024-01-22 23:22:51 UTC", + "Built": "R 4.2.3; ; 2024-03-07 18:17:39 UTC; unix" + } + }, + "cpp11": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "cpp11", + "Title": "A C++11 Interface for R's C Interface", + "Version": "0.4.2", + "Authors@R": "\n c(person(given = \"Jim\",\n family = \"Hester\",\n role = \"aut\",\n comment = c(ORCID = \"0000-0002-2739-7082\")),\n person(given = \"Romain\",\n family = \"François\",\n role = c(\"aut\", \"cre\"),\n email = \"romain@rstudio.com\"),\n person(given = \"Benjamin\",\n family = \"Kietzman\",\n role = \"ctb\"),\n person(given = \"RStudio\",\n role = c(\"cph\", \"fnd\")))", + "Description": "Provides a header only, C++11 interface to R's C\n interface. Compared to other approaches 'cpp11' strives to be safe\n against long jumps from the C API as well as C++ exceptions, conform\n to normal R function semantics and supports interaction with 'ALTREP'\n vectors.", + "License": "MIT + file LICENSE", + "URL": "https://cpp11.r-lib.org, https://github.com/r-lib/cpp11", + "BugReports": "https://github.com/r-lib/cpp11/issues", + "Suggests": "bench, brio, callr, cli, covr, decor, desc, ggplot2, glue,\nknitr, lobstr, mockery, progress, rmarkdown, scales, Rcpp,\ntestthat, tibble, utils, vctrs, withr", + "VignetteBuilder": "knitr", + "Config/testthat/edition": "3", + "Config/Needs/cpp11/cpp_register": "brio, cli, decor, desc, glue, tibble,\nvctrs", + "Encoding": "UTF-8", + "RoxygenNote": "7.1.2", + "SystemRequirements": "C++11", + "NeedsCompilation": "no", + "Packaged": "2021-11-29 17:26:06 UTC; jhester", + "Author": "Jim Hester [aut] (),\n Romain François [aut, cre],\n Benjamin Kietzman [ctb],\n RStudio [cph, fnd]", + "Maintainer": "Romain François ", + "Repository": "CRAN", + "Date/Publication": "2021-11-30 09:10:04 UTC", + "Built": "R 4.1.0; ; 2022-09-07 20:26:55 UTC; unix" + } + }, + "crayon": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "crayon", + "Title": "Colored Terminal Output", + "Version": "1.5.0", + "Authors@R": "c(\n person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\",\n role = c(\"aut\", \"cre\")),\n person(\n \"Brodie\", \"Gaslam\", email=\"brodie.gaslam@yahoo.com\",\n role=c(\"ctb\"))\n )", + "Description": "Colored terminal output on terminals that support 'ANSI'\n color and highlight codes. It also works in 'Emacs' 'ESS'. 'ANSI'\n color support is automatically detected. Colors and highlighting can\n be combined and nested. New styles can also be created easily.\n This package was inspired by the 'chalk' 'JavaScript' project.", + "License": "MIT + file LICENSE", + "URL": "https://github.com/r-lib/crayon#readme", + "BugReports": "https://github.com/r-lib/crayon/issues", + "Collate": "'aaa-rstudio-detect.R' 'aaaa-rematch2.R'\n'aab-num-ansi-colors.R' 'aac-num-ansi-colors.R' 'ansi-256.r'\n'ansi-palette.R' 'combine.r' 'string.r' 'utils.r'\n'crayon-package.r' 'disposable.r' 'has_ansi.r' 'has_color.r'\n'link.R' 'styles.r' 'machinery.r' 'parts.r' 'print.r'\n'style-var.r' 'show.r' 'string_operations.r'", + "Imports": "grDevices, methods, utils", + "Suggests": "mockery, rstudioapi, testthat, withr", + "RoxygenNote": "7.1.2", + "Encoding": "UTF-8", + "NeedsCompilation": "no", + "Packaged": "2022-02-10 17:53:01 UTC; gaborcsardi", + "Author": "Gábor Csárdi [aut, cre],\n Brodie Gaslam [ctb]", + "Maintainer": "Gábor Csárdi ", + "Repository": "CRAN", + "Date/Publication": "2022-02-14 10:30:02 UTC", + "Built": "R 4.1.0; ; 2022-09-02 16:39:59 UTC; unix" + } + }, + "crosstalk": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "crosstalk", + "Type": "Package", + "Title": "Inter-Widget Interactivity for HTML Widgets", + "Version": "1.2.0", + "Authors@R": "c(\n person(\"Joe\", \"Cheng\", role = \"aut\", email = \"joe@rstudio.com\"),\n person(\"Carson\", \"Sievert\", role = c(\"aut\", \"cre\"),\n email = \"carson@rstudio.com\", comment = c(ORCID = \"0000-0002-4958-2844\")),\n person(family = \"RStudio\", role = \"cph\"),\n person(family = \"jQuery Foundation\", role = \"cph\",\n comment = \"jQuery library and jQuery UI library\"),\n person(family = \"jQuery contributors\", role = c(\"ctb\", \"cph\"),\n comment = \"jQuery library; authors listed in inst/www/shared/jquery-AUTHORS.txt\"),\n person(\"Mark\", \"Otto\", role = \"ctb\",\n comment = \"Bootstrap library\"),\n person(\"Jacob\", \"Thornton\", role = \"ctb\",\n comment = \"Bootstrap library\"),\n person(family = \"Bootstrap contributors\", role = \"ctb\",\n comment = \"Bootstrap library\"),\n person(family = \"Twitter, Inc\", role = \"cph\",\n comment = \"Bootstrap library\"),\n person(\"Brian\", \"Reavis\", role = c(\"ctb\", \"cph\"),\n comment = \"selectize.js library\"),\n person(\"Kristopher Michael\", \"Kowal\", role = c(\"ctb\", \"cph\"),\n comment = \"es5-shim library\"),\n person(family = \"es5-shim contributors\", role = c(\"ctb\", \"cph\"),\n comment = \"es5-shim library\"),\n person(\"Denis\", \"Ineshin\", role = c(\"ctb\", \"cph\"),\n comment = \"ion.rangeSlider library\"),\n person(\"Sami\", \"Samhuri\", role = c(\"ctb\", \"cph\"),\n comment = \"Javascript strftime library\")\n )", + "Description": "Provides building blocks for allowing HTML widgets to communicate\n with each other, with Shiny or without (i.e. static .html files). Currently\n supports linked brushing and filtering.", + "License": "MIT + file LICENSE", + "Imports": "htmltools (>= 0.3.6), jsonlite, lazyeval, R6", + "Suggests": "shiny, ggplot2, testthat (>= 2.1.0), sass, bslib", + "URL": "https://rstudio.github.io/crosstalk/", + "BugReports": "https://github.com/rstudio/crosstalk/issues", + "RoxygenNote": "7.1.1", + "Encoding": "UTF-8", + "NeedsCompilation": "no", + "Packaged": "2021-11-04 15:35:47 UTC; cpsievert", + "Author": "Joe Cheng [aut],\n Carson Sievert [aut, cre] (),\n RStudio [cph],\n jQuery Foundation [cph] (jQuery library and jQuery UI library),\n jQuery contributors [ctb, cph] (jQuery library; authors listed in\n inst/www/shared/jquery-AUTHORS.txt),\n Mark Otto [ctb] (Bootstrap library),\n Jacob Thornton [ctb] (Bootstrap library),\n Bootstrap contributors [ctb] (Bootstrap library),\n Twitter, Inc [cph] (Bootstrap library),\n Brian Reavis [ctb, cph] (selectize.js library),\n Kristopher Michael Kowal [ctb, cph] (es5-shim library),\n es5-shim contributors [ctb, cph] (es5-shim library),\n Denis Ineshin [ctb, cph] (ion.rangeSlider library),\n Sami Samhuri [ctb, cph] (Javascript strftime library)", + "Maintainer": "Carson Sievert ", + "Repository": "CRAN", + "Date/Publication": "2021-11-04 16:30:02 UTC", + "Built": "R 4.1.0; ; 2022-09-02 16:31:49 UTC; unix" + } + }, + "curl": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "curl", + "Type": "Package", + "Title": "A Modern and Flexible Web Client for R", + "Version": "4.3.2", + "Authors@R": "c(\n person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroen@berkeley.edu\",\n comment = c(ORCID = \"0000-0002-4035-0289\")),\n person(\"Hadley\", \"Wickham\", , \"hadley@rstudio.com\", role = \"ctb\"),\n person(\"RStudio\", role = \"cph\")\n )", + "Description": "The curl() and curl_download() functions provide highly\n configurable drop-in replacements for base url() and download.file() with\n better performance, support for encryption (https, ftps), gzip compression,\n authentication, and other 'libcurl' goodies. The core of the package implements a\n framework for performing fully customized requests where data can be processed\n either in memory, on disk, or streaming via the callback or connection\n interfaces. Some knowledge of 'libcurl' is recommended; for a more-user-friendly\n web client see the 'httr' package which builds on this package with http\n specific tools and logic.", + "License": "MIT + file LICENSE", + "SystemRequirements": "libcurl: libcurl-devel (rpm) or\nlibcurl4-openssl-dev (deb).", + "URL": "https://github.com/jeroen/curl (devel) https://curl.se/libcurl/\n(upstream)", + "BugReports": "https://github.com/jeroen/curl/issues", + "Suggests": "spelling, testthat (>= 1.0.0), knitr, jsonlite, rmarkdown,\nmagrittr, httpuv (>= 1.4.4), webutils", + "VignetteBuilder": "knitr", + "Depends": "R (>= 3.0.0)", + "RoxygenNote": "7.1.1", + "Encoding": "UTF-8", + "Language": "en-US", + "NeedsCompilation": "yes", + "Packaged": "2021-06-22 11:39:40 UTC; jeroen", + "Author": "Jeroen Ooms [aut, cre] (),\n Hadley Wickham [ctb],\n RStudio [cph]", + "Maintainer": "Jeroen Ooms ", + "Repository": "CRAN", + "Date/Publication": "2021-06-23 07:00:06 UTC", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-09-02 16:47:49 UTC; unix" + } + }, + "data.table": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "data.table", + "Version": "1.14.2", + "Title": "Extension of `data.frame`", + "Authors@R": "c(\n person(\"Matt\",\"Dowle\", role=c(\"aut\",\"cre\"), email=\"mattjdowle@gmail.com\"),\n person(\"Arun\",\"Srinivasan\", role=\"aut\", email=\"asrini@pm.me\"),\n person(\"Jan\",\"Gorecki\", role=\"ctb\"),\n person(\"Michael\",\"Chirico\", role=\"ctb\"),\n person(\"Pasha\",\"Stetsenko\", role=\"ctb\"),\n person(\"Tom\",\"Short\", role=\"ctb\"),\n person(\"Steve\",\"Lianoglou\", role=\"ctb\"),\n person(\"Eduard\",\"Antonyan\", role=\"ctb\"),\n person(\"Markus\",\"Bonsch\", role=\"ctb\"),\n person(\"Hugh\",\"Parsonage\", role=\"ctb\"),\n person(\"Scott\",\"Ritchie\", role=\"ctb\"),\n person(\"Kun\",\"Ren\", role=\"ctb\"),\n person(\"Xianying\",\"Tan\", role=\"ctb\"),\n person(\"Rick\",\"Saporta\", role=\"ctb\"),\n person(\"Otto\",\"Seiskari\", role=\"ctb\"),\n person(\"Xianghui\",\"Dong\", role=\"ctb\"),\n person(\"Michel\",\"Lang\", role=\"ctb\"),\n person(\"Watal\",\"Iwasaki\", role=\"ctb\"),\n person(\"Seth\",\"Wenchel\", role=\"ctb\"),\n person(\"Karl\",\"Broman\", role=\"ctb\"),\n person(\"Tobias\",\"Schmidt\", role=\"ctb\"),\n person(\"David\",\"Arenburg\", role=\"ctb\"),\n person(\"Ethan\",\"Smith\", role=\"ctb\"),\n person(\"Francois\",\"Cocquemas\", role=\"ctb\"),\n person(\"Matthieu\",\"Gomez\", role=\"ctb\"),\n person(\"Philippe\",\"Chataignon\", role=\"ctb\"),\n person(\"Nello\",\"Blaser\", role=\"ctb\"),\n person(\"Dmitry\",\"Selivanov\", role=\"ctb\"),\n person(\"Andrey\",\"Riabushenko\", role=\"ctb\"),\n person(\"Cheng\",\"Lee\", role=\"ctb\"),\n person(\"Declan\",\"Groves\", role=\"ctb\"),\n person(\"Daniel\",\"Possenriede\", role=\"ctb\"),\n person(\"Felipe\",\"Parages\", role=\"ctb\"),\n person(\"Denes\",\"Toth\", role=\"ctb\"),\n person(\"Mus\",\"Yaramaz-David\", role=\"ctb\"),\n person(\"Ayappan\",\"Perumal\", role=\"ctb\"),\n person(\"James\",\"Sams\", role=\"ctb\"),\n person(\"Martin\",\"Morgan\", role=\"ctb\"),\n person(\"Michael\",\"Quinn\", role=\"ctb\"),\n person(\"@javrucebo\",\"\", role=\"ctb\"),\n person(\"@marc-outins\",\"\", role=\"ctb\"),\n person(\"Roy\",\"Storey\", role=\"ctb\"),\n person(\"Manish\",\"Saraswat\", role=\"ctb\"),\n person(\"Morgan\",\"Jacob\", role=\"ctb\"),\n person(\"Michael\",\"Schubmehl\", role=\"ctb\"),\n person(\"Davis\",\"Vaughan\", role=\"ctb\"),\n person(\"Toby\",\"Hocking\", role=\"ctb\"),\n person(\"Leonardo\",\"Silvestri\", role=\"ctb\"),\n person(\"Tyson\",\"Barrett\", role=\"ctb\"),\n person(\"Jim\",\"Hester\", role=\"ctb\"),\n person(\"Anthony\",\"Damico\", role=\"ctb\"),\n person(\"Sebastian\",\"Freundt\", role=\"ctb\"),\n person(\"David\",\"Simons\", role=\"ctb\"),\n person(\"Elliott\",\"Sales de Andrade\", role=\"ctb\"),\n person(\"Cole\",\"Miller\", role=\"ctb\"),\n person(\"Jens Peder\",\"Meldgaard\", role=\"ctb\"),\n person(\"Vaclav\",\"Tlapak\", role=\"ctb\"),\n person(\"Kevin\",\"Ushey\", role=\"ctb\"),\n person(\"Dirk\",\"Eddelbuettel\", role=\"ctb\"),\n person(\"Ben\",\"Schwen\", role=\"ctb\"))", + "Depends": "R (>= 3.1.0)", + "Imports": "methods", + "Suggests": "bit64 (>= 4.0.0), bit (>= 4.0.4), curl, R.utils, xts,\nnanotime, zoo (>= 1.8-1), yaml, knitr, rmarkdown", + "SystemRequirements": "zlib", + "Description": "Fast aggregation of large data (e.g. 100GB in RAM), fast ordered joins, fast add/modify/delete of columns by group using no copies at all, list columns, friendly and fast character-separated-value read/write. Offers a natural and flexible syntax, for faster development.", + "License": "MPL-2.0 | file LICENSE", + "URL": "https://r-datatable.com, https://Rdatatable.gitlab.io/data.table,\nhttps://github.com/Rdatatable/data.table", + "BugReports": "https://github.com/Rdatatable/data.table/issues", + "VignetteBuilder": "knitr", + "ByteCompile": "TRUE", + "NeedsCompilation": "yes", + "Packaged": "2021-09-23 03:10:37 UTC; mdowle", + "Author": "Matt Dowle [aut, cre],\n Arun Srinivasan [aut],\n Jan Gorecki [ctb],\n Michael Chirico [ctb],\n Pasha Stetsenko [ctb],\n Tom Short [ctb],\n Steve Lianoglou [ctb],\n Eduard Antonyan [ctb],\n Markus Bonsch [ctb],\n Hugh Parsonage [ctb],\n Scott Ritchie [ctb],\n Kun Ren [ctb],\n Xianying Tan [ctb],\n Rick Saporta [ctb],\n Otto Seiskari [ctb],\n Xianghui Dong [ctb],\n Michel Lang [ctb],\n Watal Iwasaki [ctb],\n Seth Wenchel [ctb],\n Karl Broman [ctb],\n Tobias Schmidt [ctb],\n David Arenburg [ctb],\n Ethan Smith [ctb],\n Francois Cocquemas [ctb],\n Matthieu Gomez [ctb],\n Philippe Chataignon [ctb],\n Nello Blaser [ctb],\n Dmitry Selivanov [ctb],\n Andrey Riabushenko [ctb],\n Cheng Lee [ctb],\n Declan Groves [ctb],\n Daniel Possenriede [ctb],\n Felipe Parages [ctb],\n Denes Toth [ctb],\n Mus Yaramaz-David [ctb],\n Ayappan Perumal [ctb],\n James Sams [ctb],\n Martin Morgan [ctb],\n Michael Quinn [ctb],\n @javrucebo [ctb],\n @marc-outins [ctb],\n Roy Storey [ctb],\n Manish Saraswat [ctb],\n Morgan Jacob [ctb],\n Michael Schubmehl [ctb],\n Davis Vaughan [ctb],\n Toby Hocking [ctb],\n Leonardo Silvestri [ctb],\n Tyson Barrett [ctb],\n Jim Hester [ctb],\n Anthony Damico [ctb],\n Sebastian Freundt [ctb],\n David Simons [ctb],\n Elliott Sales de Andrade [ctb],\n Cole Miller [ctb],\n Jens Peder Meldgaard [ctb],\n Vaclav Tlapak [ctb],\n Kevin Ushey [ctb],\n Dirk Eddelbuettel [ctb],\n Ben Schwen [ctb]", + "Maintainer": "Matt Dowle ", + "Repository": "CRAN", + "Date/Publication": "2021-09-27 16:30:02 UTC", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-09-07 20:46:45 UTC; unix" + } + }, + "datawizard": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Type": "Package", + "Package": "datawizard", + "Title": "Easy Data Wrangling", + "Version": "0.4.0", + "Authors@R": "c(\n person(\"Dominique\", \"Makowski\", , \"dom.makowski@gmail.com\", role = \"aut\",\n comment = c(ORCID = \"0000-0001-5375-9967\", Twitter = \"@Dom_Makowski\")),\n person(\"Daniel\", \"Lüdecke\", , \"d.luedecke@uke.de\", role = \"aut\",\n comment = c(ORCID = \"0000-0002-8895-3206\", Twitter = \"@strengejacke\")),\n person(\"Indrajeet\", \"Patil\", , \"patilindrajeet.science@gmail.com\", role = c(\"aut\", \"cre\"),\n comment = c(ORCID = \"0000-0003-1995-6531\", Twitter = \"@patilindrajeets\")),\n person(\"Mattan S.\", \"Ben-Shachar\", , \"matanshm@post.bgu.ac.il\", role = \"aut\",\n comment = c(ORCID = \"0000-0002-4287-4801\")),\n person(\"Brenton M.\", \"Wiernik\", , \"brenton@wiernik.org\", role = \"aut\",\n comment = c(ORCID = \"0000-0001-9560-6336\", Twitter = \"@bmwiernik\")),\n person(\"Etienne\", \"Bacher\", , \"etienne.bacher@protonmail.com\", role = \"ctb\")\n )", + "Maintainer": "Indrajeet Patil ", + "Description": "A lightweight package to easily manipulate, clean, transform,\n and prepare your data for analysis. It also forms the data wrangling\n backend for the packages in the 'easystats' ecosystem.", + "License": "GPL-3", + "URL": "https://easystats.github.io/datawizard/", + "BugReports": "https://github.com/easystats/datawizard/issues", + "Depends": "R (>= 3.4)", + "Imports": "insight (>= 0.17.0), stats, utils", + "Suggests": "bayestestR, boot, effectsize, gamm4, ggplot2, knitr, lme4,\nMASS, modelbased, parameters, poorman, psych, rmarkdown,\nrstanarm, see, spelling, testthat (>= 3.0.0)", + "VignetteBuilder": "knitr", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "Language": "en-US", + "RoxygenNote": "7.1.2", + "NeedsCompilation": "no", + "Packaged": "2022-03-29 10:20:29 UTC; mail", + "Author": "Dominique Makowski [aut] (,\n @Dom_Makowski),\n Daniel Lüdecke [aut] (,\n @strengejacke),\n Indrajeet Patil [aut, cre] (,\n @patilindrajeets),\n Mattan S. Ben-Shachar [aut] (),\n Brenton M. Wiernik [aut] (,\n @bmwiernik),\n Etienne Bacher [ctb]", + "Repository": "RSPM", + "Date/Publication": "2022-03-30 07:20:06 UTC", + "Built": "R 4.1.0; ; 2022-11-05 08:14:30 UTC; unix" + } + }, + "digest": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "digest", + "Author": "Dirk Eddelbuettel with contributions \n by Antoine Lucas, Jarek Tuszynski, Henrik Bengtsson, Simon Urbanek,\n Mario Frasca, Bryan Lewis, Murray Stokely, Hannes Muehleisen,\n Duncan Murdoch, Jim Hester, Wush Wu, Qiang Kou, Thierry Onkelinx, \n Michel Lang, Viliam Simko, Kurt Hornik, Radford Neal, Kendon Bell,\n Matthew de Queljoe, Ion Suruceanu, Bill Denney, Dirk Schumacher,\n and Winston Chang.", + "Version": "0.6.29", + "Date": "2021-11-30", + "Maintainer": "Dirk Eddelbuettel ", + "Title": "Create Compact Hash Digests of R Objects", + "Description": "Implementation of a function 'digest()' for the creation of hash\n digests of arbitrary R objects (using the 'md5', 'sha-1', 'sha-256', 'crc32',\n 'xxhash', 'murmurhash', 'spookyhash' and 'blake3' algorithms) permitting easy\n comparison of R language objects, as well as functions such as'hmac()' to\n create hash-based message authentication code. Please note that this package\n is not meant to be deployed for cryptographic purposes for which more\n comprehensive (and widely tested) libraries such as 'OpenSSL' should be\n used.", + "URL": "https://github.com/eddelbuettel/digest,\nhttp://dirk.eddelbuettel.com/code/digest.html", + "BugReports": "https://github.com/eddelbuettel/digest/issues", + "Depends": "R (>= 3.3.0)", + "Imports": "utils", + "License": "GPL (>= 2)", + "Suggests": "tinytest, simplermarkdown", + "VignetteBuilder": "simplermarkdown", + "NeedsCompilation": "yes", + "Packaged": "2021-11-30 23:41:39 UTC; edd", + "Repository": "CRAN", + "Date/Publication": "2021-12-01 07:40:02 UTC", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-09-02 16:30:24 UTC; unix" + } + }, + "dplyr": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Type": "Package", + "Package": "dplyr", + "Title": "A Grammar of Data Manipulation", + "Version": "1.1.4", + "Authors@R": "c(\n person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\"),\n comment = c(ORCID = \"0000-0003-4757-117X\")),\n person(\"Romain\", \"François\", role = \"aut\",\n comment = c(ORCID = \"0000-0002-2444-4226\")),\n person(\"Lionel\", \"Henry\", role = \"aut\"),\n person(\"Kirill\", \"Müller\", role = \"aut\",\n comment = c(ORCID = \"0000-0002-1416-3412\")),\n person(\"Davis\", \"Vaughan\", , \"davis@posit.co\", role = \"aut\",\n comment = c(ORCID = \"0000-0003-4777-038X\")),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", + "Description": "A fast, consistent tool for working with data frame like\n objects, both in memory and out of memory.", + "License": "MIT + file LICENSE", + "URL": "https://dplyr.tidyverse.org, https://github.com/tidyverse/dplyr", + "BugReports": "https://github.com/tidyverse/dplyr/issues", + "Depends": "R (>= 3.5.0)", + "Imports": "cli (>= 3.4.0), generics, glue (>= 1.3.2), lifecycle (>=\n1.0.3), magrittr (>= 1.5), methods, pillar (>= 1.9.0), R6,\nrlang (>= 1.1.0), tibble (>= 3.2.0), tidyselect (>= 1.2.0),\nutils, vctrs (>= 0.6.4)", + "Suggests": "bench, broom, callr, covr, DBI, dbplyr (>= 2.2.1), ggplot2,\nknitr, Lahman, lobstr, microbenchmark, nycflights13, purrr,\nrmarkdown, RMySQL, RPostgreSQL, RSQLite, stringi (>= 1.7.6),\ntestthat (>= 3.1.5), tidyr (>= 1.3.0), withr", + "VignetteBuilder": "knitr", + "Config/Needs/website": "tidyverse, shiny, pkgdown, tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "LazyData": "true", + "RoxygenNote": "7.2.3", + "NeedsCompilation": "yes", + "Packaged": "2023-11-16 21:48:56 UTC; hadleywickham", + "Author": "Hadley Wickham [aut, cre] (),\n Romain François [aut] (),\n Lionel Henry [aut],\n Kirill Müller [aut] (),\n Davis Vaughan [aut] (),\n Posit Software, PBC [cph, fnd]", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN", + "Date/Publication": "2023-11-17 16:50:02 UTC", + "Built": "R 4.2.3; x86_64-pc-linux-gnu; 2024-05-08 13:34:55 UTC; unix" + } + }, + "e1071": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "e1071", + "Version": "1.7-9", + "Title": "Misc Functions of the Department of Statistics, Probability\nTheory Group (Formerly: E1071), TU Wien", + "Imports": "graphics, grDevices, class, stats, methods, utils, proxy", + "Suggests": "cluster, mlbench, nnet, randomForest, rpart, SparseM, xtable,\nMatrix, MASS, slam", + "Authors@R": "c(person(given = \"David\", family = \"Meyer\", role = c(\"aut\", \"cre\"), email = \"David.Meyer@R-project.org\"),\n person(given = \"Evgenia\", family = \"Dimitriadou\", role = c(\"aut\",\"cph\")),\n person(given = \"Kurt\", family = \"Hornik\", role = \"aut\"),\n person(given = \"Andreas\", family = \"Weingessel\", role = \"aut\"),\n person(given = \"Friedrich\", family = \"Leisch\", role = \"aut\"),\n person(given = \"Chih-Chung\", family = \"Chang\", role = c(\"ctb\",\"cph\"), comment = \"libsvm C++-code\"),\n person(given = \"Chih-Chen\", family = \"Lin\", role = c(\"ctb\",\"cph\"), comment = \"libsvm C++-code\"))", + "Description": "Functions for latent class analysis, short time Fourier\n\t transform, fuzzy clustering, support vector machines,\n\t shortest path computation, bagged clustering, naive Bayes\n\t classifier, generalized k-nearest neighbour ...", + "License": "GPL-2 | GPL-3", + "LazyLoad": "yes", + "NeedsCompilation": "yes", + "Packaged": "2021-09-16 06:33:26 UTC; meyer", + "Author": "David Meyer [aut, cre],\n Evgenia Dimitriadou [aut, cph],\n Kurt Hornik [aut],\n Andreas Weingessel [aut],\n Friedrich Leisch [aut],\n Chih-Chung Chang [ctb, cph] (libsvm C++-code),\n Chih-Chen Lin [ctb, cph] (libsvm C++-code)", + "Maintainer": "David Meyer ", + "Repository": "CRAN", + "Date/Publication": "2021-09-16 16:42:50 UTC", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-11-05 08:13:57 UTC; unix" + } + }, + "ellipsis": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "ellipsis", + "Version": "0.3.2", + "Title": "Tools for Working with ...", + "Description": "The ellipsis is a powerful tool for extending functions. Unfortunately \n this power comes at a cost: misspelled arguments will be silently ignored. \n The ellipsis package provides a collection of functions to catch problems\n and alert the user.", + "Authors@R": "c(\n person(\"Hadley\", \"Wickham\", , \"hadley@rstudio.com\", role = c(\"aut\", \"cre\")),\n person(\"RStudio\", role = \"cph\")\n )", + "License": "MIT + file LICENSE", + "Encoding": "UTF-8", + "RoxygenNote": "7.1.1", + "URL": "https://ellipsis.r-lib.org, https://github.com/r-lib/ellipsis", + "BugReports": "https://github.com/r-lib/ellipsis/issues", + "Depends": "R (>= 3.2)", + "Imports": "rlang (>= 0.3.0)", + "Suggests": "covr, testthat", + "NeedsCompilation": "yes", + "Packaged": "2021-04-29 12:06:44 UTC; lionel", + "Author": "Hadley Wickham [aut, cre],\n RStudio [cph]", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN", + "Date/Publication": "2021-04-29 12:40:02 UTC", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-09-02 16:43:48 UTC; unix" + } + }, + "evaluate": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "evaluate", + "Type": "Package", + "Title": "Parsing and Evaluation Tools that Provide More Details than the\nDefault", + "Version": "0.15", + "Authors@R": "c(\n person(\"Hadley\", \"Wickham\", role = \"aut\"),\n person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\")),\n person(\"Michael\", \"Lawrence\", role = \"ctb\"),\n person(\"Thomas\", \"Kluyver\", role = \"ctb\"),\n person(\"Jeroen\", \"Ooms\", role = \"ctb\"),\n person(\"Barret\", \"Schloerke\", role = \"ctb\"),\n person(\"Adam\", \"Ryczkowski\", role = \"ctb\"),\n person(\"Hiroaki\", \"Yutani\", role = \"ctb\"),\n person(\"Michel\", \"Lang\", role = \"ctb\"),\n person(\"Karolis\", \"Koncevičius\", role = \"ctb\")\n )", + "Description": "Parsing and evaluation tools that make it easy to recreate the\n command line behaviour of R.", + "License": "MIT + file LICENSE", + "URL": "https://github.com/r-lib/evaluate", + "BugReports": "https://github.com/r-lib/evaluate/issues", + "Depends": "R (>= 3.0.2)", + "Imports": "methods", + "Suggests": "covr, ggplot2, lattice, testthat", + "RoxygenNote": "7.1.1", + "Encoding": "UTF-8", + "NeedsCompilation": "no", + "Packaged": "2022-02-18 16:51:14 UTC; yihui", + "Author": "Hadley Wickham [aut],\n Yihui Xie [aut, cre] (),\n Michael Lawrence [ctb],\n Thomas Kluyver [ctb],\n Jeroen Ooms [ctb],\n Barret Schloerke [ctb],\n Adam Ryczkowski [ctb],\n Hiroaki Yutani [ctb],\n Michel Lang [ctb],\n Karolis Koncevičius [ctb]", + "Maintainer": "Yihui Xie ", + "Repository": "CRAN", + "Date/Publication": "2022-02-18 17:20:02 UTC", + "Built": "R 4.1.0; ; 2022-09-07 20:33:24 UTC; unix" + } + }, + "expm": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "expm", + "Type": "Package", + "Title": "Matrix Exponential, Log, 'etc'", + "Version": "0.999-6", + "Date": "2021-01-12", + "Author": "Vincent Goulet, Christophe Dutang, Martin Maechler,\n\tDavid Firth, Marina Shapira, Michael Stadelmann", + "Contact": "expm-developers@lists.R-forge.R-project.org", + "Maintainer": "Martin Maechler ", + "Description": "Computation of the matrix exponential, logarithm, sqrt,\n and related quantities, using traditional and modern methods.", + "Depends": "Matrix", + "Imports": "methods", + "Suggests": "RColorBrewer, sfsmisc, Rmpfr", + "BuildResaveData": "no", + "License": "GPL (>= 2)", + "URL": "http://R-Forge.R-project.org/projects/expm/", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Packaged": "2021-01-12 14:07:43 UTC; maechler", + "Repository": "CRAN", + "Date/Publication": "2021-01-13 11:50:12 UTC", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-11-05 08:08:13 UTC; unix" + } + }, + "fansi": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "fansi", + "Title": "ANSI Control Sequence Aware String Functions", + "Description": "Counterparts to R string manipulation functions that account for\n the effects of ANSI text formatting control sequences.", + "Version": "1.0.3", + "Authors@R": "c(\n person(\"Brodie\", \"Gaslam\", email=\"brodie.gaslam@yahoo.com\",\n role=c(\"aut\", \"cre\")),\n person(\"Elliott\", \"Sales De Andrade\", role=\"ctb\"),\n person(family=\"R Core Team\",\n email=\"R-core@r-project.org\", role=\"cph\",\n comment=\"UTF8 byte length calcs from src/util.c\"\n ))", + "Depends": "R (>= 3.1.0)", + "License": "GPL-2 | GPL-3", + "URL": "https://github.com/brodieG/fansi", + "BugReports": "https://github.com/brodieG/fansi/issues", + "VignetteBuilder": "knitr", + "Suggests": "unitizer, knitr, rmarkdown", + "Imports": "grDevices, utils", + "RoxygenNote": "7.1.1", + "Encoding": "UTF-8", + "Collate": "'constants.R' 'fansi-package.R' 'internal.R' 'load.R' 'misc.R'\n'nchar.R' 'strwrap.R' 'strtrim.R' 'strsplit.R' 'substr2.R'\n'trimws.R' 'tohtml.R' 'unhandled.R' 'normalize.R' 'sgr.R'", + "NeedsCompilation": "yes", + "Packaged": "2022-03-24 00:52:26 UTC; bg", + "Author": "Brodie Gaslam [aut, cre],\n Elliott Sales De Andrade [ctb],\n R Core Team [cph] (UTF8 byte length calcs from src/util.c)", + "Maintainer": "Brodie Gaslam ", + "Repository": "RSPM", + "Date/Publication": "2022-03-24 07:50:02 UTC", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-09-07 20:17:18 UTC; unix" + } + }, + "farver": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "farver", + "Type": "Package", + "Title": "High Performance Colour Space Manipulation", + "Version": "2.1.0", + "Authors@R": "\n c(person(given = \"Thomas Lin\",\n family = \"Pedersen\",\n role = c(\"cre\", \"aut\"),\n email = \"thomasp85@gmail.com\",\n comment = c(ORCID = \"0000-0002-5147-4711\")),\n person(given = \"Berendea\",\n family = \"Nicolae\",\n role = \"aut\",\n comment = \"Author of the ColorSpace C++ library\"),\n person(given = \"Romain\", \n family = \"François\", \n role = \"aut\", \n email = \"romain@purrple.cat\",\n comment = c(ORCID = \"0000-0002-2444-4226\")) \n )", + "Maintainer": "Thomas Lin Pedersen ", + "Description": "The encoding of colour can be handled in many different ways, using\n different colour spaces. As different colour spaces have different uses,\n efficient conversion between these representations are important. The \n 'farver' package provides a set of functions that gives access to very fast\n colour space conversion and comparisons implemented in C++, and offers \n speed improvements over the 'convertColor' function in the 'grDevices' \n package.", + "License": "MIT + file LICENSE", + "Encoding": "UTF-8", + "SystemRequirements": "C++11", + "RoxygenNote": "7.1.1", + "URL": "https://farver.data-imaginist.com,\nhttps://github.com/thomasp85/farver", + "BugReports": "https://github.com/thomasp85/farver/issues", + "Suggests": "testthat (>= 2.1.0), covr", + "NeedsCompilation": "yes", + "Packaged": "2021-02-28 19:00:15 UTC; thomas", + "Author": "Thomas Lin Pedersen [cre, aut]\n (),\n Berendea Nicolae [aut] (Author of the ColorSpace C++ library),\n Romain François [aut] ()", + "Repository": "CRAN", + "Date/Publication": "2021-02-28 19:30:02 UTC", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-09-07 20:16:50 UTC; unix" + } + }, + "fastmap": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "fastmap", + "Title": "Fast Data Structures", + "Version": "1.1.1", + "Authors@R": "c(\n person(\"Winston\", \"Chang\", email = \"winston@rstudio.com\", role = c(\"aut\", \"cre\")),\n person(given = \"RStudio\", role = c(\"cph\", \"fnd\")),\n person(given = \"Tessil\", role = \"cph\", comment = \"hopscotch_map library\")\n )", + "Description": "Fast implementation of data structures, including a key-value\n store, stack, and queue. Environments are commonly used as key-value stores\n in R, but every time a new key is used, it is added to R's global symbol\n table, causing a small amount of memory leakage. This can be problematic in\n cases where many different keys are used. Fastmap avoids this memory leak\n issue by implementing the map using data structures in C++.", + "License": "MIT + file LICENSE", + "Encoding": "UTF-8", + "RoxygenNote": "7.2.3", + "Suggests": "testthat (>= 2.1.1)", + "URL": "https://r-lib.github.io/fastmap/, https://github.com/r-lib/fastmap", + "BugReports": "https://github.com/r-lib/fastmap/issues", + "NeedsCompilation": "yes", + "Packaged": "2023-02-24 16:01:27 UTC; winston", + "Author": "Winston Chang [aut, cre],\n RStudio [cph, fnd],\n Tessil [cph] (hopscotch_map library)", + "Maintainer": "Winston Chang ", + "Repository": "CRAN", + "Date/Publication": "2023-02-24 16:30:02 UTC", + "Built": "R 4.2.3; x86_64-pc-linux-gnu; 2024-04-12 14:41:25 UTC; unix" + } + }, + "fmsb": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "fmsb", + "Version": "0.7.6", + "Date": "2024-1-16", + "Title": "Functions for Medical Statistics Book with some Demographic Data", + "Author": "Minato Nakazawa ", + "Maintainer": "Minato Nakazawa ", + "Depends": "R (>= 2.2.0)", + "Suggests": "Epi, vcd", + "Description": "Several utility functions for the book entitled \n\t\"Practices of Medical and Health Data Analysis using R\"\n\t(Pearson Education Japan, 2007) with Japanese demographic\n\tdata and some demographic analysis related functions.", + "License": "GPL (>= 2)", + "URL": "https://minato.sip21c.org/msb/", + "NeedsCompilation": "no", + "Packaged": "2024-01-19 06:32:26 UTC; minat", + "Repository": "CRAN", + "Date/Publication": "2024-01-19 10:10:02 UTC", + "Built": "R 4.2.3; ; 2024-03-07 18:17:59 UTC; unix" + } + }, + "fontawesome": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Type": "Package", + "Package": "fontawesome", + "Version": "0.5.2", + "Title": "Easily Work with 'Font Awesome' Icons", + "Description": "Easily and flexibly insert 'Font Awesome' icons into 'R Markdown'\n documents and 'Shiny' apps. These icons can be inserted into HTML content\n through inline 'SVG' tags or 'i' tags. There is also a utility function for\n exporting 'Font Awesome' icons as 'PNG' images for those situations where\n raster graphics are needed.", + "Authors@R": "c(\n person(\"Richard\", \"Iannone\", , \"rich@posit.co\", c(\"aut\", \"cre\"),\n comment = c(ORCID = \"0000-0003-3925-190X\")),\n person(\"Christophe\", \"Dervieux\", , \"cderv@posit.co\", role = \"ctb\",\n comment = c(ORCID = \"0000-0003-4474-2498\")),\n person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"ctb\"),\n person(\"Dave\", \"Gandy\", role = c(\"ctb\", \"cph\"),\n comment = \"Font-Awesome font\"),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", + "License": "MIT + file LICENSE", + "URL": "https://github.com/rstudio/fontawesome,\nhttps://rstudio.github.io/fontawesome/", + "BugReports": "https://github.com/rstudio/fontawesome/issues", + "Encoding": "UTF-8", + "ByteCompile": "true", + "RoxygenNote": "7.2.3", + "Depends": "R (>= 3.3.0)", + "Imports": "rlang (>= 1.0.6), htmltools (>= 0.5.1.1)", + "Suggests": "covr, dplyr (>= 1.0.8), knitr (>= 1.31), testthat (>= 3.0.0),\nrsvg", + "Config/testthat/edition": "3", + "NeedsCompilation": "no", + "Packaged": "2023-08-19 02:32:12 UTC; rich", + "Author": "Richard Iannone [aut, cre] (),\n Christophe Dervieux [ctb] (),\n Winston Chang [ctb],\n Dave Gandy [ctb, cph] (Font-Awesome font),\n Posit Software, PBC [cph, fnd]", + "Maintainer": "Richard Iannone ", + "Repository": "CRAN", + "Date/Publication": "2023-08-19 04:52:40 UTC", + "Built": "R 4.2.3; ; 2024-04-12 14:41:05 UTC; unix" + } + }, + "forcats": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "forcats", + "Title": "Tools for Working with Categorical Variables (Factors)", + "Version": "0.5.1", + "Authors@R": "\n c(person(given = \"Hadley\",\n family = \"Wickham\",\n role = c(\"aut\", \"cre\"),\n email = \"hadley@rstudio.com\"),\n person(given = \"RStudio\",\n role = c(\"cph\", \"fnd\")))", + "Description": "Helpers for reordering factor levels (including\n moving specified levels to front, ordering by first appearance,\n reversing, and randomly shuffling), and tools for modifying factor\n levels (including collapsing rare levels into other, 'anonymising',\n and manually 'recoding').", + "License": "MIT + file LICENSE", + "URL": "https://forcats.tidyverse.org,\nhttps://github.com/tidyverse/forcats", + "BugReports": "https://github.com/tidyverse/forcats/issues", + "Depends": "R (>= 3.2)", + "Imports": "ellipsis, magrittr, rlang, tibble", + "Suggests": "covr, dplyr, ggplot2, knitr, readr, rmarkdown, testthat", + "VignetteBuilder": "knitr", + "Encoding": "UTF-8", + "LazyData": "true", + "RoxygenNote": "7.1.1", + "NeedsCompilation": "no", + "Packaged": "2021-01-27 18:16:43 UTC; hadley", + "Author": "Hadley Wickham [aut, cre],\n RStudio [cph, fnd]", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN", + "Date/Publication": "2021-01-27 19:50:02 UTC", + "Built": "R 4.1.0; ; 2022-11-05 08:12:43 UTC; unix" + } + }, + "foreign": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "foreign", + "Priority": "recommended", + "Version": "0.8-84", + "Date": "2022-12-06", + "Title": "Read Data Stored by 'Minitab', 'S', 'SAS', 'SPSS', 'Stata',\n'Systat', 'Weka', 'dBase', ...", + "Depends": "R (>= 4.0.0)", + "Imports": "methods, utils, stats", + "Authors@R": "c(\n person(\"R Core Team\",\n email = \"R-core@R-project.org\", role = c(\"aut\", \"cph\", \"cre\")),\n person(\"Roger\", \"Bivand\", role = c(\"ctb\", \"cph\")),\n person(c(\"Vincent\", \"J.\"), \"Carey\", role = c(\"ctb\", \"cph\")),\n person(\"Saikat\", \"DebRoy\", role = c(\"ctb\", \"cph\")),\n person(\"Stephen\", \"Eglen\", role = c(\"ctb\", \"cph\")),\n person(\"Rajarshi\", \"Guha\", role = c(\"ctb\", \"cph\")),\n person(\"Swetlana\", \"Herbrandt\", role = \"ctb\"),\n person(\"Nicholas\", \"Lewin-Koh\", role = c(\"ctb\", \"cph\")),\n person(\"Mark\", \"Myatt\", role = c(\"ctb\", \"cph\")),\n person(\"Michael\", \"Nelson\", role = \"ctb\"),\n person(\"Ben\", \"Pfaff\", role = \"ctb\"),\n person(\"Brian\", \"Quistorff\", role = \"ctb\"),\n person(\"Frank\", \"Warmerdam\", role = c(\"ctb\", \"cph\")),\n person(\"Stephen\", \"Weigand\", role = c(\"ctb\", \"cph\")),\n person(\"Free Software Foundation, Inc.\", role = \"cph\"))", + "Contact": "see 'MailingList'", + "Copyright": "see file COPYRIGHTS", + "Description": "Reading and writing data stored by some versions of\n\t'Epi Info', 'Minitab', 'S', 'SAS', 'SPSS', 'Stata', 'Systat', 'Weka',\n\tand for reading and writing some 'dBase' files.", + "ByteCompile": "yes", + "Biarch": "yes", + "License": "GPL (>= 2)", + "BugReports": "https://bugs.r-project.org", + "MailingList": "R-help@r-project.org", + "URL": "https://svn.r-project.org/R-packages/trunk/foreign/", + "NeedsCompilation": "yes", + "Packaged": "2022-12-06 07:44:50 UTC; ripley", + "Author": "R Core Team [aut, cph, cre],\n Roger Bivand [ctb, cph],\n Vincent J. Carey [ctb, cph],\n Saikat DebRoy [ctb, cph],\n Stephen Eglen [ctb, cph],\n Rajarshi Guha [ctb, cph],\n Swetlana Herbrandt [ctb],\n Nicholas Lewin-Koh [ctb, cph],\n Mark Myatt [ctb, cph],\n Michael Nelson [ctb],\n Ben Pfaff [ctb],\n Brian Quistorff [ctb],\n Frank Warmerdam [ctb, cph],\n Stephen Weigand [ctb, cph],\n Free Software Foundation, Inc. [cph]", + "Maintainer": "R Core Team ", + "Repository": "CRAN", + "Date/Publication": "2022-12-06 09:00:40 UTC", + "Built": "R 4.2.3; x86_64-pc-linux-gnu; 2023-10-03 23:19:03 UTC; unix" + } + }, + "fs": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "fs", + "Title": "Cross-Platform File System Operations Based on 'libuv'", + "Version": "1.6.4", + "Authors@R": "c(\n person(\"Jim\", \"Hester\", role = \"aut\"),\n person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"),\n person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")),\n person(\"libuv project contributors\", role = \"cph\",\n comment = \"libuv library\"),\n person(\"Joyent, Inc. and other Node contributors\", role = \"cph\",\n comment = \"libuv library\"),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", + "Description": "A cross-platform interface to file system operations, built\n on top of the 'libuv' C library.", + "License": "MIT + file LICENSE", + "URL": "https://fs.r-lib.org, https://github.com/r-lib/fs", + "BugReports": "https://github.com/r-lib/fs/issues", + "Depends": "R (>= 3.6)", + "Imports": "methods", + "Suggests": "covr, crayon, knitr, pillar (>= 1.0.0), rmarkdown, spelling,\ntestthat (>= 3.0.0), tibble (>= 1.1.0), vctrs (>= 0.3.0), withr", + "VignetteBuilder": "knitr", + "ByteCompile": "true", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Copyright": "file COPYRIGHTS", + "Encoding": "UTF-8", + "Language": "en-US", + "RoxygenNote": "7.2.3", + "SystemRequirements": "GNU make", + "NeedsCompilation": "yes", + "Packaged": "2024-04-25 11:57:22 UTC; gaborcsardi", + "Author": "Jim Hester [aut],\n Hadley Wickham [aut],\n Gábor Csárdi [aut, cre],\n libuv project contributors [cph] (libuv library),\n Joyent, Inc. and other Node contributors [cph] (libuv library),\n Posit Software, PBC [cph, fnd]", + "Maintainer": "Gábor Csárdi ", + "Repository": "CRAN", + "Date/Publication": "2024-04-25 12:50:02 UTC", + "Built": "R 4.2.3; x86_64-pc-linux-gnu; 2024-05-08 13:58:35 UTC; unix" + } + }, + "generics": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "generics", + "Title": "Common S3 Generics not Provided by Base R Methods Related to\nModel Fitting", + "Version": "0.1.2", + "Authors@R": "\n c(person(given = \"Hadley\",\n family = \"Wickham\",\n role = c(\"aut\", \"cre\"),\n email = \"hadley@rstudio.com\"),\n person(given = \"Max\",\n family = \"Kuhn\",\n role = \"aut\",\n email = \"max@rstudio.com\"),\n person(given = \"Davis\",\n family = \"Vaughan\",\n role = \"aut\",\n email = \"davis@rstudio.com\"),\n person(given = \"RStudio\",\n role = \"cph\"))", + "Description": "In order to reduce potential package dependencies\n and conflicts, generics provides a number of commonly used S3\n generics.", + "License": "MIT + file LICENSE", + "URL": "https://generics.r-lib.org, https://github.com/r-lib/generics", + "BugReports": "https://github.com/r-lib/generics/issues", + "Depends": "R (>= 3.2)", + "Imports": "methods", + "Suggests": "covr, pkgload, testthat (>= 3.0.0), tibble, withr", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.1.2", + "NeedsCompilation": "no", + "Packaged": "2022-01-31 22:58:18 UTC; hadley", + "Author": "Hadley Wickham [aut, cre],\n Max Kuhn [aut],\n Davis Vaughan [aut],\n RStudio [cph]", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN", + "Date/Publication": "2022-01-31 23:30:02 UTC", + "Built": "R 4.1.0; ; 2022-09-07 20:26:59 UTC; unix" + } + }, + "ggplot2": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "ggplot2", + "Version": "3.5.0", + "Title": "Create Elegant Data Visualisations Using the Grammar of Graphics", + "Authors@R": "c(\n person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\",\n comment = c(ORCID = \"0000-0003-4757-117X\")),\n person(\"Winston\", \"Chang\", role = \"aut\",\n comment = c(ORCID = \"0000-0002-1576-2126\")),\n person(\"Lionel\", \"Henry\", role = \"aut\"),\n person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"aut\", \"cre\"),\n comment = c(ORCID = \"0000-0002-5147-4711\")),\n person(\"Kohske\", \"Takahashi\", role = \"aut\"),\n person(\"Claus\", \"Wilke\", role = \"aut\",\n comment = c(ORCID = \"0000-0002-7470-9261\")),\n person(\"Kara\", \"Woo\", role = \"aut\",\n comment = c(ORCID = \"0000-0002-5125-4188\")),\n person(\"Hiroaki\", \"Yutani\", role = \"aut\",\n comment = c(ORCID = \"0000-0002-3385-7233\")),\n person(\"Dewey\", \"Dunnington\", role = \"aut\",\n comment = c(ORCID = \"0000-0002-9415-4582\")),\n person(\"Teun\", \"van den Brand\", role = \"aut\",\n comment = c(ORCID = \"0000-0002-9335-7468\")),\n person(\"Posit, PBC\", role = c(\"cph\", \"fnd\"))\n )", + "Description": "A system for 'declaratively' creating graphics, based on \"The\n Grammar of Graphics\". You provide the data, tell 'ggplot2' how to map\n variables to aesthetics, what graphical primitives to use, and it\n takes care of the details.", + "License": "MIT + file LICENSE", + "URL": "https://ggplot2.tidyverse.org,\nhttps://github.com/tidyverse/ggplot2", + "BugReports": "https://github.com/tidyverse/ggplot2/issues", + "Depends": "R (>= 3.5)", + "Imports": "cli, glue, grDevices, grid, gtable (>= 0.1.1), isoband,\nlifecycle (> 1.0.1), MASS, mgcv, rlang (>= 1.1.0), scales (>=\n1.3.0), stats, tibble, vctrs (>= 0.5.0), withr (>= 2.5.0)", + "Suggests": "covr, dplyr, ggplot2movies, hexbin, Hmisc, knitr, mapproj,\nmaps, multcomp, munsell, nlme, profvis, quantreg, ragg (>=\n1.2.6), RColorBrewer, rmarkdown, rpart, sf (>= 0.7-3), svglite\n(>= 2.1.2), testthat (>= 3.1.2), vdiffr (>= 1.0.6), xml2", + "Enhances": "sp", + "VignetteBuilder": "knitr", + "Config/Needs/website": "ggtext, tidyr, forcats, tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "LazyData": "true", + "RoxygenNote": "7.3.0", + "Collate": "'ggproto.R' 'ggplot-global.R' 'aaa-.R'\n'aes-colour-fill-alpha.R' 'aes-evaluation.R'\n'aes-group-order.R' 'aes-linetype-size-shape.R'\n'aes-position.R' 'compat-plyr.R' 'utilities.R' 'aes.R'\n'utilities-checks.R' 'legend-draw.R' 'geom-.R'\n'annotation-custom.R' 'annotation-logticks.R' 'geom-polygon.R'\n'geom-map.R' 'annotation-map.R' 'geom-raster.R'\n'annotation-raster.R' 'annotation.R' 'autolayer.R' 'autoplot.R'\n'axis-secondary.R' 'backports.R' 'bench.R' 'bin.R' 'coord-.R'\n'coord-cartesian-.R' 'coord-fixed.R' 'coord-flip.R'\n'coord-map.R' 'coord-munch.R' 'coord-polar.R'\n'coord-quickmap.R' 'coord-radial.R' 'coord-sf.R'\n'coord-transform.R' 'data.R' 'facet-.R' 'facet-grid-.R'\n'facet-null.R' 'facet-wrap.R' 'fortify-lm.R' 'fortify-map.R'\n'fortify-multcomp.R' 'fortify-spatial.R' 'fortify.R' 'stat-.R'\n'geom-abline.R' 'geom-rect.R' 'geom-bar.R' 'geom-bin2d.R'\n'geom-blank.R' 'geom-boxplot.R' 'geom-col.R' 'geom-path.R'\n'geom-contour.R' 'geom-count.R' 'geom-crossbar.R'\n'geom-segment.R' 'geom-curve.R' 'geom-defaults.R'\n'geom-ribbon.R' 'geom-density.R' 'geom-density2d.R'\n'geom-dotplot.R' 'geom-errorbar.R' 'geom-errorbarh.R'\n'geom-freqpoly.R' 'geom-function.R' 'geom-hex.R'\n'geom-histogram.R' 'geom-hline.R' 'geom-jitter.R'\n'geom-label.R' 'geom-linerange.R' 'geom-point.R'\n'geom-pointrange.R' 'geom-quantile.R' 'geom-rug.R' 'geom-sf.R'\n'geom-smooth.R' 'geom-spoke.R' 'geom-text.R' 'geom-tile.R'\n'geom-violin.R' 'geom-vline.R' 'ggplot2-package.R'\n'grob-absolute.R' 'grob-dotstack.R' 'grob-null.R' 'grouping.R'\n'theme-elements.R' 'guide-.R' 'guide-axis.R'\n'guide-axis-logticks.R' 'guide-axis-stack.R'\n'guide-axis-theta.R' 'guide-legend.R' 'guide-bins.R'\n'guide-colorbar.R' 'guide-colorsteps.R' 'guide-custom.R'\n'layer.R' 'guide-none.R' 'guide-old.R' 'guides-.R'\n'guides-grid.R' 'hexbin.R' 'import-standalone-obj-type.R'\n'import-standalone-types-check.R' 'labeller.R' 'labels.R'\n'layer-sf.R' 'layout.R' 'limits.R' 'margins.R' 'performance.R'\n'plot-build.R' 'plot-construction.R' 'plot-last.R' 'plot.R'\n'position-.R' 'position-collide.R' 'position-dodge.R'\n'position-dodge2.R' 'position-identity.R' 'position-jitter.R'\n'position-jitterdodge.R' 'position-nudge.R' 'position-stack.R'\n'quick-plot.R' 'reshape-add-margins.R' 'save.R' 'scale-.R'\n'scale-alpha.R' 'scale-binned.R' 'scale-brewer.R'\n'scale-colour.R' 'scale-continuous.R' 'scale-date.R'\n'scale-discrete-.R' 'scale-expansion.R' 'scale-gradient.R'\n'scale-grey.R' 'scale-hue.R' 'scale-identity.R'\n'scale-linetype.R' 'scale-linewidth.R' 'scale-manual.R'\n'scale-shape.R' 'scale-size.R' 'scale-steps.R' 'scale-type.R'\n'scale-view.R' 'scale-viridis.R' 'scales-.R' 'stat-align.R'\n'stat-bin.R' 'stat-bin2d.R' 'stat-bindot.R' 'stat-binhex.R'\n'stat-boxplot.R' 'stat-contour.R' 'stat-count.R'\n'stat-density-2d.R' 'stat-density.R' 'stat-ecdf.R'\n'stat-ellipse.R' 'stat-function.R' 'stat-identity.R'\n'stat-qq-line.R' 'stat-qq.R' 'stat-quantilemethods.R'\n'stat-sf-coordinates.R' 'stat-sf.R' 'stat-smooth-methods.R'\n'stat-smooth.R' 'stat-sum.R' 'stat-summary-2d.R'\n'stat-summary-bin.R' 'stat-summary-hex.R' 'stat-summary.R'\n'stat-unique.R' 'stat-ydensity.R' 'summarise-plot.R'\n'summary.R' 'theme.R' 'theme-defaults.R' 'theme-current.R'\n'utilities-break.R' 'utilities-grid.R' 'utilities-help.R'\n'utilities-matrix.R' 'utilities-patterns.R'\n'utilities-resolution.R' 'utilities-tidy-eval.R' 'zxx.R'\n'zzz.R'", + "NeedsCompilation": "no", + "Packaged": "2024-02-21 12:29:53 UTC; thomas", + "Author": "Hadley Wickham [aut] (),\n Winston Chang [aut] (),\n Lionel Henry [aut],\n Thomas Lin Pedersen [aut, cre]\n (),\n Kohske Takahashi [aut],\n Claus Wilke [aut] (),\n Kara Woo [aut] (),\n Hiroaki Yutani [aut] (),\n Dewey Dunnington [aut] (),\n Teun van den Brand [aut] (),\n Posit, PBC [cph, fnd]", + "Maintainer": "Thomas Lin Pedersen ", + "Repository": "CRAN", + "Date/Publication": "2024-02-23 09:30:02 UTC", + "Built": "R 4.2.3; ; 2024-03-07 18:16:43 UTC; unix" + } + }, + "gld": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "gld", + "Version": "2.6.4", + "Date": "2021-12-16", + "Title": "Estimation and Use of the Generalised (Tukey) Lambda\nDistribution", + "Suggests": "", + "Imports": "stats, graphics, e1071, lmom", + "Authors@R": "\n c(person(given=\"Robert\",family=\"King\",\n role=c(\"aut\",\"cre\"),\n email=\"Robert.King.Newcastle@gmail.com\",\n comment=c(ORCID=\"0000-0001-7495-6599\")),\n person(given=\"Benjamin\",family=\"Dean\",\n role=\"aut\",\n email=\"Benjamin.Dean@uon.edu.au\"),\n person(given=\"Sigbert\",family=\"Klinke\",\n role=\"aut\"),\n person(given=\"Paul\",family=\"van Staden\",\n role=\"aut\",email=\"paul.vanstaden@up.ac.za\",\n comment=c(ORCID=\"0000-0002-5710-5984\"))\n )", + "Description": "The generalised lambda distribution, or Tukey lambda distribution, \n provides a wide variety of shapes with one functional form. \n This package provides random numbers, quantiles, probabilities, \n densities and density quantiles for four different types of the distribution,\n the FKML (Freimer et al 1988), RS (Ramberg and Schmeiser 1974), GPD (van Staden\n and Loots 2009) and FM5 - see documentation for details.\n It provides the density function, distribution function, and Quantile-Quantile \n plots. \n It implements a variety of estimation methods for the distribution, \n including diagnostic plots. \n Estimation methods include the starship (all 4 types), \n method of L-Moments for the GPD and FKML types, and a \n number of methods for only the FKML type. \n These include maximum likelihood, maximum product of spacings, \n Titterington's method, Moments, Trimmed L-Moments and \n Distributional Least Absolutes. ", + "License": "GPL (>= 2)", + "URL": "https://github.com/newystats/gld/", + "NeedsCompilation": "yes", + "Packaged": "2021-12-16 04:30:35 UTC; rober", + "Author": "Robert King [aut, cre] (),\n Benjamin Dean [aut],\n Sigbert Klinke [aut],\n Paul van Staden [aut] ()", + "Maintainer": "Robert King ", + "Repository": "RSPM", + "Date/Publication": "2021-12-16 08:20:05 UTC", + "Encoding": "UTF-8", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-11-05 08:16:22 UTC; unix" + } + }, + "glue": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "glue", + "Title": "Interpreted String Literals", + "Version": "1.7.0", + "Authors@R": "c(\n person(\"Jim\", \"Hester\", role = \"aut\",\n comment = c(ORCID = \"0000-0002-2739-7082\")),\n person(\"Jennifer\", \"Bryan\", , \"jenny@posit.co\", role = c(\"aut\", \"cre\"),\n comment = c(ORCID = \"0000-0002-6983-2759\")),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", + "Description": "An implementation of interpreted string literals, inspired by\n Python's Literal String Interpolation\n and Docstrings\n and Julia's Triple-Quoted\n String Literals\n .", + "License": "MIT + file LICENSE", + "URL": "https://glue.tidyverse.org/, https://github.com/tidyverse/glue", + "BugReports": "https://github.com/tidyverse/glue/issues", + "Depends": "R (>= 3.6)", + "Imports": "methods", + "Suggests": "crayon, DBI (>= 1.2.0), dplyr, knitr, magrittr, rlang,\nrmarkdown, RSQLite, testthat (>= 3.2.0), vctrs (>= 0.3.0),\nwaldo (>= 0.3.0), withr", + "VignetteBuilder": "knitr", + "ByteCompile": "true", + "Config/Needs/website": "bench, forcats, ggbeeswarm, ggplot2, R.utils,\nrprintf, tidyr, tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.2.3.9000", + "NeedsCompilation": "yes", + "Packaged": "2024-01-08 16:10:57 UTC; jenny", + "Author": "Jim Hester [aut] (),\n Jennifer Bryan [aut, cre] (),\n Posit Software, PBC [cph, fnd]", + "Maintainer": "Jennifer Bryan ", + "Repository": "CRAN", + "Date/Publication": "2024-01-09 23:13:08 UTC", + "Built": "R 4.2.3; x86_64-pc-linux-gnu; 2024-03-06 22:22:43 UTC; unix" + } + }, + "gridExtra": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "gridExtra", + "Authors@R": "c(person(\"Baptiste\", \"Auguie\",\n email = \"baptiste.auguie@gmail.com\",\n role = c(\"aut\", \"cre\")), person(\"Anton\", \"Antonov\",\n email = \"tonytonov@gmail.com\",\n role = c(\"ctb\")))", + "License": "GPL (>= 2)", + "Title": "Miscellaneous Functions for \"Grid\" Graphics", + "Type": "Package", + "Description": "Provides a number of user-level functions to work with \"grid\"\n graphics, notably to arrange multiple grid-based plots on a page, and draw\n tables.", + "Version": "2.3", + "VignetteBuilder": "knitr", + "Imports": "gtable, grid, grDevices, graphics, utils", + "Suggests": "ggplot2, egg, lattice, knitr, testthat", + "RoxygenNote": "6.0.1", + "NeedsCompilation": "no", + "Packaged": "2017-09-08 22:52:09 UTC; baptiste", + "Author": "Baptiste Auguie [aut, cre],\n Anton Antonov [ctb]", + "Maintainer": "Baptiste Auguie ", + "Repository": "CRAN", + "Date/Publication": "2017-09-09 14:12:08 UTC", + "Built": "R 4.1.0; ; 2022-11-05 08:12:32 UTC; unix" + } + }, + "gtable": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "gtable", + "Title": "Arrange 'Grobs' in Tables", + "Version": "0.3.0", + "Authors@R": "\n c(person(given = \"Hadley\",\n family = \"Wickham\",\n role = c(\"aut\", \"cre\"),\n email = \"hadley@rstudio.com\"),\n person(given = \"Thomas Lin\",\n family = \"Pedersen\",\n role = \"aut\",\n email = \"thomas.pedersen@rstudio.com\"),\n person(given = \"RStudio\",\n role = \"cph\"))", + "Description": "Tools to make it easier to work with \"tables\" of\n 'grobs'. The 'gtable' package defines a 'gtable' grob class that specifies a\n grid along with a list of grobs and their placement in the grid. Further the\n package makes it easy to manipulate and combine 'gtable' objects so that \n complex compositions can be build up sequentially.", + "License": "GPL-2", + "Depends": "R (>= 3.0)", + "Imports": "grid", + "Suggests": "covr, testthat, knitr, rmarkdown, ggplot2, profvis", + "Encoding": "UTF-8", + "RoxygenNote": "6.1.1", + "Collate": "'new-data-frame.r' 'add-grob.r' 'add-rows-cols.r'\n'add-space.r' 'grid.r' 'gtable-layouts.r' 'gtable-package.R'\n'gtable.r' 'rbind-cbind.r' 'utils.r' 'trim.r' 'filter.r'\n'align.r' 'padding.r' 'z.r'", + "URL": "https://github.com/r-lib/gtable", + "BugReports": "https://github.com/r-lib/gtable/issues", + "VignetteBuilder": "knitr", + "NeedsCompilation": "no", + "Packaged": "2019-03-25 14:56:43 UTC; thomas", + "Author": "Hadley Wickham [aut, cre],\n Thomas Lin Pedersen [aut],\n RStudio [cph]", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN", + "Date/Publication": "2019-03-25 19:50:02 UTC", + "Built": "R 4.1.0; ; 2022-09-07 20:17:26 UTC; unix" + } + }, + "haven": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "haven", + "Title": "Import and Export 'SPSS', 'Stata' and 'SAS' Files", + "Version": "2.5.0", + "Authors@R": "c(\n person(\"Hadley\", \"Wickham\", , \"hadley@rstudio.com\", role = c(\"aut\", \"cre\")),\n person(\"Evan\", \"Miller\", role = c(\"aut\", \"cph\"),\n comment = \"Author of included ReadStat code\"),\n person(\"Danny\", \"Smith\", role = \"aut\"),\n person(\"RStudio\", role = c(\"cph\", \"fnd\"))\n )", + "Description": "Import foreign statistical formats into R via the embedded\n 'ReadStat' C library, .", + "License": "MIT + file LICENSE", + "URL": "https://haven.tidyverse.org, https://github.com/tidyverse/haven,\nhttps://github.com/WizardMac/ReadStat", + "BugReports": "https://github.com/tidyverse/haven/issues", + "Depends": "R (>= 3.4)", + "Imports": "cli (>= 3.0.0), forcats (>= 0.2.0), hms, lifecycle, methods,\nreadr (>= 0.1.0), rlang (>= 0.4.0), tibble, tidyselect, vctrs\n(>= 0.3.0)", + "Suggests": "covr, crayon, fs, knitr, pillar (>= 1.4.0), rmarkdown,\ntestthat (>= 3.0.0)", + "LinkingTo": "cpp11", + "VignetteBuilder": "knitr", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.1.2", + "SystemRequirements": "GNU make, C++11, zlib: zlib1g-dev (deb), zlib-devel\n(rpm)", + "NeedsCompilation": "yes", + "Packaged": "2022-04-15 15:00:04 UTC; hadleywickham", + "Author": "Hadley Wickham [aut, cre],\n Evan Miller [aut, cph] (Author of included ReadStat code),\n Danny Smith [aut],\n RStudio [cph, fnd]", + "Maintainer": "Hadley Wickham ", + "Repository": "RSPM", + "Date/Publication": "2022-04-15 16:02:30 UTC", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-11-05 08:19:19 UTC; unix" + } + }, + "here": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "here", + "Title": "A Simpler Way to Find Your Files", + "Version": "1.0.1", + "Date": "2020-12-13", + "Authors@R": "\n c(person(given = \"Kirill\",\n family = \"M\\u00fcller\",\n role = c(\"aut\", \"cre\"),\n email = \"krlmlr+r@mailbox.org\",\n comment = c(ORCID = \"0000-0002-1416-3412\")),\n person(given = \"Jennifer\",\n family = \"Bryan\",\n role = \"ctb\",\n email = \"jenny@rstudio.com\",\n comment = c(ORCID = \"0000-0002-6983-2759\")))", + "Description": "Constructs paths to your project's files.\n Declare the relative path of a file within your project with 'i_am()'.\n Use the 'here()' function as a drop-in replacement for 'file.path()',\n 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.0.2)", + "Suggests": "conflicted, covr, fs, knitr, palmerpenguins, plyr, readr,\nrlang, rmarkdown, testthat, uuid, withr", + "VignetteBuilder": "knitr", + "Encoding": "UTF-8", + "LazyData": "true", + "RoxygenNote": "7.1.1.9000", + "Config/testthat/edition": "3", + "NeedsCompilation": "no", + "Packaged": "2020-12-13 06:59:33 UTC; kirill", + "Author": "Kirill Müller [aut, cre] (),\n Jennifer Bryan [ctb] ()", + "Maintainer": "Kirill Müller ", + "Repository": "CRAN", + "Date/Publication": "2020-12-13 07:30:02 UTC", + "Built": "R 4.1.0; ; 2022-11-05 08:13:16 UTC; unix" + } + }, + "highr": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "highr", + "Type": "Package", + "Title": "Syntax Highlighting for R Source Code", + "Version": "0.9", + "Authors@R": "c(\n person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\")),\n person(\"Yixuan\", \"Qiu\", role = \"aut\"),\n person(\"Christopher\", \"Gandrud\", role = \"ctb\"),\n person(\"Qiang\", \"Li\", role = \"ctb\")\n )", + "Description": "Provides syntax highlighting for R source code. Currently it\n supports LaTeX and HTML output. Source code of other languages is supported\n via Andre Simon's highlight package ().", + "Depends": "R (>= 3.2.3)", + "Imports": "xfun (>= 0.18)", + "Suggests": "knitr, markdown, testit", + "License": "GPL", + "URL": "https://github.com/yihui/highr", + "BugReports": "https://github.com/yihui/highr/issues", + "VignetteBuilder": "knitr", + "RoxygenNote": "7.1.1", + "NeedsCompilation": "no", + "Packaged": "2021-04-16 21:12:10 UTC; yihui", + "Author": "Yihui Xie [aut, cre] (),\n Yixuan Qiu [aut],\n Christopher Gandrud [ctb],\n Qiang Li [ctb]", + "Maintainer": "Yihui Xie ", + "Repository": "CRAN", + "Date/Publication": "2021-04-16 21:50:05 UTC", + "Built": "R 4.1.0; ; 2022-09-07 20:34:44 UTC; unix" + } + }, + "hms": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "hms", + "Title": "Pretty Time of Day", + "Date": "2021-09-26", + "Version": "1.1.1", + "Authors@R": "c(\n person(\"Kirill\", \"Müller\", role = c(\"aut\", \"cre\"), email = \"krlmlr+r@mailbox.org\"),\n person(\"R Consortium\", role = \"fnd\"),\n person(\"RStudio\", role = \"fnd\")\n )", + "Description": "Implements an S3 class for storing and formatting time-of-day\n values, based on the 'difftime' class.", + "Imports": "ellipsis (>= 0.3.2), lifecycle, methods, pkgconfig, rlang,\nvctrs (>= 0.3.8)", + "Suggests": "crayon, lubridate, pillar (>= 1.1.0), testthat (>= 3.0.0)", + "License": "MIT + file LICENSE", + "Encoding": "UTF-8", + "URL": "https://hms.tidyverse.org/, https://github.com/tidyverse/hms", + "BugReports": "https://github.com/tidyverse/hms/issues", + "RoxygenNote": "7.1.2", + "Config/testthat/edition": "3", + "NeedsCompilation": "no", + "Packaged": "2021-09-26 19:14:12 UTC; kirill", + "Author": "Kirill Müller [aut, cre],\n R Consortium [fnd],\n RStudio [fnd]", + "Maintainer": "Kirill Müller ", + "Repository": "CRAN", + "Date/Publication": "2021-09-26 19:40:02 UTC", + "Built": "R 4.1.0; ; 2022-11-05 08:12:47 UTC; unix" + } + }, + "htmlTable": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "htmlTable", + "Version": "2.4.0", + "Title": "Advanced Tables for Markdown/HTML", + "Authors@R": "c(\n person(\"Max\", \"Gordon\", email = \"max@gforge.se\",\n role = c(\"aut\", \"cre\")),\n person(\"Stephen\", \"Gragg\", role=c(\"aut\")),\n person(\"Peter\", \"Konings\", role=c(\"aut\")))", + "Maintainer": "Max Gordon ", + "Description": "Tables with state-of-the-art layout elements such as row spanners,\n column spanners, table spanners, zebra striping, and more. While allowing\n advanced layout, the underlying css-structure is simple in order to maximize\n compatibility with common word processors. The package also contains a few \n text formatting functions that help outputting text compatible with HTML/LaTeX.", + "License": "GPL (>= 3)", + "URL": "https://gforge.se/packages/", + "BugReports": "https://github.com/gforge/htmlTable/issues", + "Biarch": "yes", + "Imports": "stringr, knitr (>= 1.6), magrittr (>= 1.5), methods,\ncheckmate, htmlwidgets, htmltools, rstudioapi (>= 0.6)", + "Suggests": "testthat, XML, xml2, Hmisc, reshape, rmarkdown, chron,\nlubridate, tibble, purrr, tidyselect, glue, rlang, tidyr (>=\n0.7.2), dplyr (>= 0.7.4)", + "Encoding": "UTF-8", + "NeedsCompilation": "no", + "VignetteBuilder": "knitr", + "RoxygenNote": "7.1.2", + "Packaged": "2022-01-04 20:38:20 UTC; max", + "Author": "Max Gordon [aut, cre],\n Stephen Gragg [aut],\n Peter Konings [aut]", + "Repository": "CRAN", + "Date/Publication": "2022-01-04 21:20:02 UTC", + "Built": "R 4.1.0; ; 2022-11-05 08:12:35 UTC; unix" + } + }, + "htmltools": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Type": "Package", + "Package": "htmltools", + "Title": "Tools for HTML", + "Version": "0.5.8.1", + "Authors@R": "c(\n person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"),\n person(\"Carson\", \"Sievert\", , \"carson@posit.co\", role = c(\"aut\", \"cre\"),\n comment = c(ORCID = \"0000-0002-4958-2844\")),\n person(\"Barret\", \"Schloerke\", , \"barret@posit.co\", role = \"aut\",\n comment = c(ORCID = \"0000-0001-9986-114X\")),\n person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"aut\",\n comment = c(ORCID = \"0000-0002-1576-2126\")),\n person(\"Yihui\", \"Xie\", , \"yihui@posit.co\", role = \"aut\"),\n person(\"Jeff\", \"Allen\", role = \"aut\"),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", + "Description": "Tools for HTML generation and output.", + "License": "GPL (>= 2)", + "URL": "https://github.com/rstudio/htmltools,\nhttps://rstudio.github.io/htmltools/", + "BugReports": "https://github.com/rstudio/htmltools/issues", + "Depends": "R (>= 2.14.1)", + "Imports": "base64enc, digest, fastmap (>= 1.1.0), grDevices, rlang (>=\n1.0.0), utils", + "Suggests": "Cairo, markdown, ragg, shiny, testthat, withr", + "Enhances": "knitr", + "Config/Needs/check": "knitr", + "Config/Needs/website": "rstudio/quillt, bench", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.1", + "Collate": "'colors.R' 'fill.R' 'html_dependency.R' 'html_escape.R'\n'html_print.R' 'htmltools-package.R' 'images.R' 'known_tags.R'\n'selector.R' 'staticimports.R' 'tag_query.R' 'utils.R' 'tags.R'\n'template.R'", + "NeedsCompilation": "yes", + "Packaged": "2024-04-02 14:26:15 UTC; cpsievert", + "Author": "Joe Cheng [aut],\n Carson Sievert [aut, cre] (),\n Barret Schloerke [aut] (),\n Winston Chang [aut] (),\n Yihui Xie [aut],\n Jeff Allen [aut],\n Posit Software, PBC [cph, fnd]", + "Maintainer": "Carson Sievert ", + "Repository": "CRAN", + "Date/Publication": "2024-04-04 05:03:00 UTC", + "Built": "R 4.2.3; x86_64-pc-linux-gnu; 2024-04-12 14:41:13 UTC; unix" + } + }, + "htmlwidgets": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Type": "Package", + "Package": "htmlwidgets", + "Title": "HTML Widgets for R", + "Version": "1.6.4", + "Authors@R": "c(\n person(\"Ramnath\", \"Vaidyanathan\", role = c(\"aut\", \"cph\")),\n person(\"Yihui\", \"Xie\", role = \"aut\"),\n person(\"JJ\", \"Allaire\", role = \"aut\"),\n person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"),\n person(\"Carson\", \"Sievert\", , \"carson@posit.co\", role = c(\"aut\", \"cre\"),\n comment = c(ORCID = \"0000-0002-4958-2844\")),\n person(\"Kenton\", \"Russell\", role = c(\"aut\", \"cph\")),\n person(\"Ellis\", \"Hughes\", role = \"ctb\"),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", + "Description": "A framework for creating HTML widgets that render in various\n contexts including the R console, 'R Markdown' documents, and 'Shiny'\n web applications.", + "License": "MIT + file LICENSE", + "URL": "https://github.com/ramnathv/htmlwidgets", + "BugReports": "https://github.com/ramnathv/htmlwidgets/issues", + "Imports": "grDevices, htmltools (>= 0.5.7), jsonlite (>= 0.9.16), knitr\n(>= 1.8), rmarkdown, yaml", + "Suggests": "testthat", + "Enhances": "shiny (>= 1.1)", + "VignetteBuilder": "knitr", + "Encoding": "UTF-8", + "RoxygenNote": "7.2.3", + "NeedsCompilation": "no", + "Packaged": "2023-12-06 00:11:16 UTC; cpsievert", + "Author": "Ramnath Vaidyanathan [aut, cph],\n Yihui Xie [aut],\n JJ Allaire [aut],\n Joe Cheng [aut],\n Carson Sievert [aut, cre] (),\n Kenton Russell [aut, cph],\n Ellis Hughes [ctb],\n Posit Software, PBC [cph, fnd]", + "Maintainer": "Carson Sievert ", + "Repository": "CRAN", + "Date/Publication": "2023-12-06 06:00:06 UTC", + "Built": "R 4.2.3; ; 2024-05-08 13:22:21 UTC; unix" + } + }, + "httpuv": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "httpuv", + "Type": "Package", + "Encoding": "UTF-8", + "Title": "HTTP and WebSocket Server Library", + "Version": "1.6.5", + "Authors@R": "c(\n person(\"Joe\", \"Cheng\", role = c(\"aut\"), email = \"joe@rstudio.com\"),\n person(\"Winston\", \"Chang\", role = c(\"aut\", \"cre\"), email = \"winston@rstudio.com\"),\n person(family = \"RStudio, PBC\", role = \"cph\"),\n person(\"Hector\", \"Corrada Bravo\", role = \"ctb\"),\n person(\"Jeroen\", \"Ooms\", role = \"ctb\"),\n person(\"Andrzej\", \"Krzemienski\", role = \"cph\", comment = \"optional.hpp\")\n )", + "Copyright": "RStudio, PBC; Joyent, Inc.; Nginx Inc.; Igor Sysoev; Niels\nProvos; Internet Systems Consortium, Inc.; Alexander Chemeris;\nBerkeley Software Design; Google Inc.; Sony Mobile\nCommunications AB; Alexander Peslyak; Free Software Foundation,\nInc.; X Consortium; Ben Noordhuis; StrongLoop, Inc.; Saúl\nIbarra Corretgé; Bert Belder; Fedor Indutny; libuv project;\nRefael Ackermann; Kenneth MacKay; Emergya; Diego Pettenò; xine\nproject, The Regents of the University of California, Dariusz\nDwornikowski", + "Description": "Provides low-level socket and protocol support for handling\n HTTP and WebSocket requests directly from within R. It is primarily\n intended as a building block for other packages, rather than making it\n particularly easy to create complete web applications using httpuv alone.\n httpuv is built on top of the libuv and http-parser C libraries, both of\n which were developed by Joyent, Inc. (See LICENSE file for libuv and\n http-parser license information.)", + "License": "GPL (>= 2) | file LICENSE", + "Depends": "R (>= 2.15.1)", + "Imports": "Rcpp (>= 1.0.7), utils, R6, promises, later (>= 0.8.0)", + "LinkingTo": "Rcpp, later", + "URL": "https://github.com/rstudio/httpuv", + "SystemRequirements": "GNU make, C++11, zlib", + "RoxygenNote": "7.1.2", + "Suggests": "testthat, callr, curl, websocket", + "Collate": "'RcppExports.R' 'httpuv.R' 'random_port.R' 'server.R'\n'static_paths.R' 'utils.R'", + "NeedsCompilation": "yes", + "Packaged": "2022-01-04 21:27:22 UTC; winston", + "Author": "Joe Cheng [aut],\n Winston Chang [aut, cre],\n RStudio, PBC [cph],\n Hector Corrada Bravo [ctb],\n Jeroen Ooms [ctb],\n Andrzej Krzemienski [cph] (optional.hpp)", + "Maintainer": "Winston Chang ", + "Repository": "CRAN", + "Date/Publication": "2022-01-05 00:40:11 UTC", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-09-02 16:37:18 UTC; unix" + } + }, + "httr": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "httr", + "Title": "Tools for Working with URLs and HTTP", + "Version": "1.4.2", + "Authors@R": "\n c(person(given = \"Hadley\",\n family = \"Wickham\",\n role = c(\"aut\", \"cre\"),\n email = \"hadley@rstudio.com\"),\n person(given = \"RStudio\",\n role = \"cph\"))", + "Description": "Useful tools for working with HTTP organised by\n HTTP verbs (GET(), POST(), etc). Configuration functions make it easy\n to control additional request components (authenticate(),\n add_headers() and so on).", + "License": "MIT + file LICENSE", + "URL": "https://httr.r-lib.org/, https://github.com/r-lib/httr", + "BugReports": "https://github.com/r-lib/httr/issues", + "Depends": "R (>= 3.2)", + "Imports": "curl (>= 3.0.0), jsonlite, mime, openssl (>= 0.8), R6", + "Suggests": "covr, httpuv, jpeg, knitr, png, readr, rmarkdown, testthat\n(>= 0.8.0), xml2", + "VignetteBuilder": "knitr", + "Encoding": "UTF-8", + "RoxygenNote": "7.1.1", + "NeedsCompilation": "no", + "Packaged": "2020-07-20 14:19:08 UTC; hadley", + "Author": "Hadley Wickham [aut, cre],\n RStudio [cph]", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN", + "Date/Publication": "2020-07-20 23:40:04 UTC", + "Built": "R 4.1.0; ; 2022-09-07 20:27:03 UTC; unix" + } + }, + "insight": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Type": "Package", + "Package": "insight", + "Title": "Easy Access to Model Information for Various Model Objects", + "Version": "0.17.0", + "Authors@R": "\n c(person(given = \"Daniel\",\n family = \"Lüdecke\",\n role = c(\"aut\", \"cre\"),\n email = \"d.luedecke@uke.de\",\n comment = c(ORCID = \"0000-0002-8895-3206\", Twitter = \"@strengejacke\")),\n person(given = \"Dominique\",\n family = \"Makowski\",\n role = c(\"aut\", \"ctb\"),\n email = \"dom.makowski@gmail.com\",\n comment = c(ORCID = \"0000-0001-5375-9967\", Twitter = \"@Dom_Makowski\")),\n person(given = \"Indrajeet\",\n family = \"Patil\",\n role = c(\"aut\", \"ctb\"),\n email = \"patilindrajeet.science@gmail.com\",\n comment = c(ORCID = \"0000-0003-1995-6531\", Twitter = \"@patilindrajeets\")),\n person(given = \"Philip\",\n family = \"Waggoner\",\n role = c(\"aut\", \"ctb\"),\n email = \"philip.waggoner@gmail.com\",\n comment = c(ORCID = \"0000-0002-7825-7573\")),\n person(given = \"Mattan S.\",\n family = \"Ben-Shachar\",\n role = c(\"aut\", \"ctb\"),\n email = \"matanshm@post.bgu.ac.il\",\n comment = c(ORCID = \"0000-0002-4287-4801\")),\n person(given = \"Brenton M.\",\n family = \"Wiernik\",\n role = c(\"aut\"),\n email = \"brenton@wiernik.org\",\n comment = c(ORCID = \"0000-0001-9560-6336\", Twitter = \"@bmwiernik\")),\n person(given = \"Vincent\", \n family = \"Arel-Bundock\", \n email = \"vincent.arel-bundock@umontreal.ca\", \n role = c(\"ctb\"),\n comment = c(ORCID = \"0000-0003-2042-7063\")),\n person(given = \"Alex\",\n family = \"Hayes\",\n role = c(\"rev\"),\n email = \"alexpghayes@gmail.com\",\n comment = c(ORCID = \"0000-0002-4985-5160\")))", + "Maintainer": "Daniel Lüdecke ", + "Description": "A tool to provide an easy, intuitive and consistent\n access to information contained in various R models, like model\n formulas, model terms, information about random effects, data that was\n used to fit the model or data from response variables. 'insight'\n mainly revolves around two types of functions: Functions that find\n (the names of) information, starting with 'find_', and functions that\n get the underlying data, starting with 'get_'. The package has a\n consistent syntax and works with many different model objects, where\n otherwise functions to access these information are missing.", + "License": "GPL-3", + "URL": "https://easystats.github.io/insight/", + "BugReports": "https://github.com/easystats/insight/issues", + "Depends": "R (>= 3.4)", + "Imports": "methods, stats, utils", + "Suggests": "AER, afex, aod, BayesFactor, bayestestR, bbmle, bdsmatrix,\nbetareg, bife, biglm, blavaan, blme, boot, brms, censReg, cgam,\nclubSandwich, coxme, cplm, crch, datawizard, effectsize,\nemmeans, epiR, estimatr, feisr, fixest, fungible, gam, gamlss,\ngamm4, gbm, gee, geepack, GLMMadaptive, glmmTMB, gmnl, gt,\nhttr, ivreg, JM, knitr, lavaan, lfe, lme4, lmtest, logistf,\nMASS, marginaleffects, Matrix, mclust, MCMCglmm, merTools,\nmetaBMA, mgcv, mice, mlogit, multgee, nlme, nnet, nonnest2,\nordinal, panelr, parameters, parsnip, performance, plm,\npoorman, pscl, psych, quantreg, rmarkdown, rms, robustbase,\nrobustlmm, rstanarm (>= 2.21.1), rstantools, rstudioapi,\nsandwich, speedglm, spelling, splines, statmod, survey,\nsurvival, testthat, tripack, truncreg, tweedie, VGAM", + "VignetteBuilder": "knitr", + "Encoding": "UTF-8", + "Language": "en-US", + "RoxygenNote": "7.1.2", + "Config/testthat/edition": "3", + "NeedsCompilation": "no", + "Packaged": "2022-03-23 17:57:24 UTC; Daniel", + "Author": "Daniel Lüdecke [aut, cre] (,\n @strengejacke),\n Dominique Makowski [aut, ctb] (,\n @Dom_Makowski),\n Indrajeet Patil [aut, ctb] (,\n @patilindrajeets),\n Philip Waggoner [aut, ctb] (),\n Mattan S. Ben-Shachar [aut, ctb]\n (),\n Brenton M. Wiernik [aut] (,\n @bmwiernik),\n Vincent Arel-Bundock [ctb] (),\n Alex Hayes [rev] ()", + "Repository": "RSPM", + "Date/Publication": "2022-03-29 06:40:05 UTC", + "Built": "R 4.1.0; ; 2022-11-05 08:13:22 UTC; unix" + } + }, + "isoband": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "isoband", + "Title": "Generate Isolines and Isobands from Regularly Spaced Elevation\nGrids", + "Version": "0.2.5", + "Authors@R": "\n c(person(given = \"Claus O.\",\n family = \"Wilke\",\n role = c(\"aut\", \"cre\"),\n email = \"wilke@austin.utexas.edu\",\n comment = c(ORCID = \"0000-0002-7470-9261\")),\n person(given = \"Thomas Lin\",\n family = \"Pedersen\",\n role = \"aut\",\n email = \"thomasp85@gmail.com\",\n comment = c(ORCID = \"0000-0002-5147-4711\")),\n person(given = \"testthat and Catch authors\",\n role = \"ctb\",\n comment = \"testthat C++ testing code\"))", + "Description": "A fast C++ implementation to generate contour lines (isolines) and\n contour polygons (isobands) from regularly spaced grids containing elevation data.", + "URL": "https://wilkelab.org/isoband/", + "BugReports": "https://github.com/wilkelab/isoband/issues", + "License": "MIT + file LICENSE", + "Encoding": "UTF-8", + "Imports": "grid, utils", + "RoxygenNote": "7.1.1", + "Config/testthat/edition": "3", + "Suggests": "covr, ggplot2, knitr, magick, microbenchmark, rmarkdown, sf,\ntestthat, xml2", + "SystemRequirements": "C++11", + "VignetteBuilder": "knitr", + "NeedsCompilation": "yes", + "Packaged": "2021-07-12 20:44:13 UTC; clauswilke", + "Author": "Claus O. Wilke [aut, cre] (),\n Thomas Lin Pedersen [aut] (),\n testthat and Catch authors [ctb] (testthat C++ testing code)", + "Maintainer": "Claus O. Wilke ", + "Repository": "CRAN", + "Date/Publication": "2021-07-13 04:50:13 UTC", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-09-07 20:17:30 UTC; unix" + } + }, + "jpeg": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "jpeg", + "Version": "0.1-9", + "Title": "Read and write JPEG images", + "Author": "Simon Urbanek ", + "Maintainer": "Simon Urbanek ", + "Depends": "R (>= 2.9.0)", + "Description": "This package provides an easy and simple way to read, write and display bitmap images stored in the JPEG format. It can read and write both files and in-memory raw vectors.", + "License": "GPL-2 | GPL-3", + "SystemRequirements": "libjpeg", + "URL": "http://www.rforge.net/jpeg/", + "NeedsCompilation": "yes", + "Packaged": "2021-07-23 23:40:17 UTC; svnuser", + "Repository": "CRAN", + "Date/Publication": "2021-07-24 10:07:24 UTC", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-11-05 08:07:53 UTC; unix" + } + }, + "jquerylib": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "jquerylib", + "Title": "Obtain 'jQuery' as an HTML Dependency Object", + "Version": "0.1.4", + "Authors@R": "c(\n person(\"Carson\", \"Sievert\", role = c(\"aut\", \"cre\"), email = \"carson@rstudio.com\", comment = c(ORCID = \"0000-0002-4958-2844\")),\n person(\"Joe\", \"Cheng\", role = \"aut\", email = \"joe@rstudio.com\"),\n person(family = \"RStudio\", role = \"cph\"),\n person(family = \"jQuery Foundation\", role = \"cph\",\n comment = \"jQuery library and jQuery UI library\"),\n person(family = \"jQuery contributors\", role = c(\"ctb\", \"cph\"),\n comment = \"jQuery library; authors listed in inst/lib/jquery-AUTHORS.txt\")\n )", + "Description": "Obtain any major version of 'jQuery' () and use it in any webpage generated by 'htmltools' (e.g. 'shiny', 'htmlwidgets', and 'rmarkdown').\n Most R users don't need to use this package directly, but other R packages (e.g. 'shiny', 'rmarkdown', etc.) depend on this package to avoid bundling redundant copies of 'jQuery'.", + "License": "MIT + file LICENSE", + "Encoding": "UTF-8", + "Config/testthat/edition": "3", + "RoxygenNote": "7.0.2", + "Imports": "htmltools", + "Suggests": "testthat", + "NeedsCompilation": "no", + "Packaged": "2021-04-26 16:40:21 UTC; cpsievert", + "Author": "Carson Sievert [aut, cre] (),\n Joe Cheng [aut],\n RStudio [cph],\n jQuery Foundation [cph] (jQuery library and jQuery UI library),\n jQuery contributors [ctb, cph] (jQuery library; authors listed in\n inst/lib/jquery-AUTHORS.txt)", + "Maintainer": "Carson Sievert ", + "Repository": "CRAN", + "Date/Publication": "2021-04-26 17:10:02 UTC", + "Built": "R 4.1.0; ; 2022-09-02 16:31:54 UTC; unix" + } + }, + "jsonlite": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "jsonlite", + "Version": "1.8.0", + "Title": "A Simple and Robust JSON Parser and Generator for R", + "License": "MIT + file LICENSE", + "Depends": "methods", + "Authors@R": "c(\n person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroen@berkeley.edu\",\n comment = c(ORCID = \"0000-0002-4035-0289\")),\n person(\"Duncan\", \"Temple Lang\", role = \"ctb\"),\n person(\"Lloyd\", \"Hilaiel\", role = \"cph\", comment=\"author of bundled libyajl\"))", + "URL": "https://arxiv.org/abs/1403.2805 (paper)", + "BugReports": "https://github.com/jeroen/jsonlite/issues", + "Maintainer": "Jeroen Ooms ", + "VignetteBuilder": "knitr, R.rsp", + "Description": "A reasonably fast JSON parser and generator, optimized for statistical \n data and the web. Offers simple, flexible tools for working with JSON in R, and\n is particularly powerful for building pipelines and interacting with a web API. \n The implementation is based on the mapping described in the vignette (Ooms, 2014).\n In addition to converting JSON data from/to R objects, 'jsonlite' contains \n functions to stream, validate, and prettify JSON data. The unit tests included \n with the package verify that all edge cases are encoded and decoded consistently \n for use with dynamic data in systems and applications.", + "Suggests": "httr, curl, vctrs, testthat, knitr, rmarkdown, R.rsp, sf", + "RoxygenNote": "7.1.1", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Packaged": "2022-02-22 09:27:49 UTC; jeroen", + "Author": "Jeroen Ooms [aut, cre] (),\n Duncan Temple Lang [ctb],\n Lloyd Hilaiel [cph] (author of bundled libyajl)", + "Repository": "CRAN", + "Date/Publication": "2022-02-22 11:20:02 UTC", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-09-02 16:31:32 UTC; unix" + } + }, + "knitr": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "knitr", + "Type": "Package", + "Title": "A General-Purpose Package for Dynamic Report Generation in R", + "Version": "1.39", + "Authors@R": "c(\n person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\")),\n person(\"Abhraneel\", \"Sarma\", role = \"ctb\"),\n person(\"Adam\", \"Vogt\", role = \"ctb\"),\n person(\"Alastair\", \"Andrew\", role = \"ctb\"),\n person(\"Alex\", \"Zvoleff\", role = \"ctb\"),\n person(\"Andre\", \"Simon\", role = \"ctb\", comment = \"the CSS files under inst/themes/ were derived from the Highlight package http://www.andre-simon.de\"),\n person(\"Aron\", \"Atkins\", role = \"ctb\"),\n person(\"Aaron\", \"Wolen\", role = \"ctb\"),\n person(\"Ashley\", \"Manton\", role = \"ctb\"),\n person(\"Atsushi\", \"Yasumoto\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8335-495X\")),\n person(\"Ben\", \"Baumer\", role = \"ctb\"),\n person(\"Brian\", \"Diggs\", role = \"ctb\"),\n person(\"Brian\", \"Zhang\", role = \"ctb\"),\n person(\"Bulat\", \"Yapparov\", role = \"ctb\"),\n person(\"Cassio\", \"Pereira\", role = \"ctb\"),\n person(\"Christophe\", \"Dervieux\", role = \"ctb\"),\n person(\"David\", \"Hall\", role = \"ctb\"),\n person(\"David\", \"Hugh-Jones\", role = \"ctb\"),\n person(\"David\", \"Robinson\", role = \"ctb\"),\n person(\"Doug\", \"Hemken\", role = \"ctb\"),\n person(\"Duncan\", \"Murdoch\", role = \"ctb\"),\n person(\"Elio\", \"Campitelli\", role = \"ctb\"),\n person(\"Ellis\", \"Hughes\", role = \"ctb\"),\n person(\"Emily\", \"Riederer\", role = \"ctb\"),\n person(\"Fabian\", \"Hirschmann\", role = \"ctb\"),\n person(\"Fitch\", \"Simeon\", role = \"ctb\"),\n person(\"Forest\", \"Fang\", role = \"ctb\"),\n person(c(\"Frank\", \"E\", \"Harrell\", \"Jr\"), role = \"ctb\", comment = \"the Sweavel package at inst/misc/Sweavel.sty\"),\n person(\"Garrick\", \"Aden-Buie\", role = \"ctb\"),\n person(\"Gregoire\", \"Detrez\", role = \"ctb\"),\n person(\"Hadley\", \"Wickham\", role = \"ctb\"),\n person(\"Hao\", \"Zhu\", role = \"ctb\"),\n person(\"Heewon\", \"Jeon\", role = \"ctb\"),\n person(\"Henrik\", \"Bengtsson\", role = \"ctb\"),\n person(\"Hiroaki\", \"Yutani\", role = \"ctb\"),\n person(\"Ian\", \"Lyttle\", role = \"ctb\"),\n person(\"Hodges\", \"Daniel\", role = \"ctb\"),\n person(\"Jake\", \"Burkhead\", role = \"ctb\"),\n person(\"James\", \"Manton\", role = \"ctb\"),\n person(\"Jared\", \"Lander\", role = \"ctb\"),\n person(\"Jason\", \"Punyon\", role = \"ctb\"),\n person(\"Javier\", \"Luraschi\", role = \"ctb\"),\n person(\"Jeff\", \"Arnold\", role = \"ctb\"),\n person(\"Jenny\", \"Bryan\", role = \"ctb\"),\n person(\"Jeremy\", \"Ashkenas\", role = c(\"ctb\", \"cph\"), comment = \"the CSS file at inst/misc/docco-classic.css\"),\n person(\"Jeremy\", \"Stephens\", role = \"ctb\"),\n person(\"Jim\", \"Hester\", role = \"ctb\"),\n person(\"Joe\", \"Cheng\", role = \"ctb\"),\n person(\"Johannes\", \"Ranke\", role = \"ctb\"),\n person(\"John\", \"Honaker\", role = \"ctb\"),\n person(\"John\", \"Muschelli\", role = \"ctb\"),\n person(\"Jonathan\", \"Keane\", role = \"ctb\"),\n person(\"JJ\", \"Allaire\", role = \"ctb\"),\n person(\"Johan\", \"Toloe\", role = \"ctb\"),\n person(\"Jonathan\", \"Sidi\", role = \"ctb\"),\n person(\"Joseph\", \"Larmarange\", role = \"ctb\"),\n person(\"Julien\", \"Barnier\", role = \"ctb\"),\n person(\"Kaiyin\", \"Zhong\", role = \"ctb\"),\n person(\"Kamil\", \"Slowikowski\", role = \"ctb\"),\n person(\"Karl\", \"Forner\", role = \"ctb\"),\n person(c(\"Kevin\", \"K.\"), \"Smith\", role = \"ctb\"),\n person(\"Kirill\", \"Mueller\", role = \"ctb\"),\n person(\"Kohske\", \"Takahashi\", role = \"ctb\"),\n person(\"Lorenz\", \"Walthert\", role = \"ctb\"),\n person(\"Lucas\", \"Gallindo\", role = \"ctb\"),\n person(\"Marius\", \"Hofert\", role = \"ctb\"),\n person(\"Martin\", \"Modrák\", role = \"ctb\"),\n person(\"Michael\", \"Chirico\", role = \"ctb\"),\n person(\"Michael\", \"Friendly\", role = \"ctb\"),\n person(\"Michal\", \"Bojanowski\", role = \"ctb\"),\n person(\"Michel\", \"Kuhlmann\", role = \"ctb\"),\n person(\"Miller\", \"Patrick\", role = \"ctb\"),\n person(\"Nacho\", \"Caballero\", role = \"ctb\"),\n person(\"Nick\", \"Salkowski\", role = \"ctb\"),\n person(\"Niels Richard\", \"Hansen\", role = \"ctb\"),\n person(\"Noam\", \"Ross\", role = \"ctb\"),\n person(\"Obada\", \"Mahdi\", role = \"ctb\"),\n person(\"Pavel N.\", \"Krivitsky\", role = \"ctb\", comment=c(ORCID = \"0000-0002-9101-3362\")),\n person(\"Qiang\", \"Li\", role = \"ctb\"),\n person(\"Ramnath\", \"Vaidyanathan\", role = \"ctb\"),\n person(\"Richard\", \"Cotton\", role = \"ctb\"),\n person(\"Robert\", \"Krzyzanowski\", role = \"ctb\"),\n person(\"Romain\", \"Francois\", role = \"ctb\"),\n person(\"Ruaridh\", \"Williamson\", role = \"ctb\"),\n person(\"Scott\", \"Kostyshak\", role = \"ctb\"),\n person(\"Sebastian\", \"Meyer\", role = \"ctb\"),\n person(\"Sietse\", \"Brouwer\", role = \"ctb\"),\n person(c(\"Simon\", \"de\"), \"Bernard\", role = \"ctb\"),\n person(\"Sylvain\", \"Rousseau\", role = \"ctb\"),\n person(\"Taiyun\", \"Wei\", role = \"ctb\"),\n person(\"Thibaut\", \"Assus\", role = \"ctb\"),\n person(\"Thibaut\", \"Lamadon\", role = \"ctb\"),\n person(\"Thomas\", \"Leeper\", role = \"ctb\"),\n person(\"Tim\", \"Mastny\", role = \"ctb\"),\n person(\"Tom\", \"Torsney-Weir\", role = \"ctb\"),\n person(\"Trevor\", \"Davis\", role = \"ctb\"),\n person(\"Viktoras\", \"Veitas\", role = \"ctb\"),\n person(\"Weicheng\", \"Zhu\", role = \"ctb\"),\n person(\"Wush\", \"Wu\", role = \"ctb\"),\n person(\"Zachary\", \"Foster\", role = \"ctb\"),\n person(\"Zhian N.\", \"Kamvar\", role = \"ctb\", comment = c(ORCID = \"0000-0003-1458-7108\"))\n )", + "Description": "Provides a general-purpose tool for dynamic report generation in R\n using Literate Programming techniques.", + "Depends": "R (>= 3.3.0)", + "Imports": "evaluate (>= 0.15), highr, methods, stringr (>= 0.6), yaml (>=\n2.1.19), xfun (>= 0.29), tools", + "Suggests": "markdown, formatR, testit, digest, rgl (>= 0.95.1201),\ncodetools, rmarkdown, htmlwidgets (>= 0.7), webshot, tikzDevice\n(>= 0.10), tinytex, reticulate (>= 1.4), JuliaCall (>= 0.11.1),\nmagick, png, jpeg, gifski, xml2 (>= 1.2.0), httr, DBI (>=\n0.4-1), showtext, tibble, sass, bslib, ragg, styler (>= 1.2.0),\ntargets (>= 0.6.0)", + "License": "GPL", + "URL": "https://yihui.org/knitr/", + "BugReports": "https://github.com/yihui/knitr/issues", + "Encoding": "UTF-8", + "VignetteBuilder": "knitr", + "SystemRequirements": "Package vignettes based on R Markdown v2 or\nreStructuredText require Pandoc (http://pandoc.org). The\nfunction rst2pdf() requires rst2pdf\n(https://github.com/rst2pdf/rst2pdf).", + "Collate": "'block.R' 'cache.R' 'utils.R' 'citation.R' 'hooks-html.R'\n'plot.R' 'defaults.R' 'concordance.R' 'engine.R' 'highlight.R'\n'themes.R' 'header.R' 'hooks-asciidoc.R' 'hooks-chunk.R'\n'hooks-extra.R' 'hooks-latex.R' 'hooks-md.R' 'hooks-rst.R'\n'hooks-textile.R' 'hooks.R' 'output.R' 'package.R' 'pandoc.R'\n'params.R' 'parser.R' 'pattern.R' 'rocco.R' 'spin.R' 'table.R'\n'template.R' 'utils-conversion.R' 'utils-rd2html.R'\n'utils-sweave.R' 'utils-upload.R' 'utils-vignettes.R' 'zzz.R'", + "RoxygenNote": "7.1.2", + "NeedsCompilation": "no", + "Packaged": "2022-04-26 22:08:17 UTC; yihui", + "Author": "Yihui Xie [aut, cre] (),\n Abhraneel Sarma [ctb],\n Adam Vogt [ctb],\n Alastair Andrew [ctb],\n Alex Zvoleff [ctb],\n Andre Simon [ctb] (the CSS files under inst/themes/ were derived from\n the Highlight package http://www.andre-simon.de),\n Aron Atkins [ctb],\n Aaron Wolen [ctb],\n Ashley Manton [ctb],\n Atsushi Yasumoto [ctb] (),\n Ben Baumer [ctb],\n Brian Diggs [ctb],\n Brian Zhang [ctb],\n Bulat Yapparov [ctb],\n Cassio Pereira [ctb],\n Christophe Dervieux [ctb],\n David Hall [ctb],\n David Hugh-Jones [ctb],\n David Robinson [ctb],\n Doug Hemken [ctb],\n Duncan Murdoch [ctb],\n Elio Campitelli [ctb],\n Ellis Hughes [ctb],\n Emily Riederer [ctb],\n Fabian Hirschmann [ctb],\n Fitch Simeon [ctb],\n Forest Fang [ctb],\n Frank E Harrell Jr [ctb] (the Sweavel package at inst/misc/Sweavel.sty),\n Garrick Aden-Buie [ctb],\n Gregoire Detrez [ctb],\n Hadley Wickham [ctb],\n Hao Zhu [ctb],\n Heewon Jeon [ctb],\n Henrik Bengtsson [ctb],\n Hiroaki Yutani [ctb],\n Ian Lyttle [ctb],\n Hodges Daniel [ctb],\n Jake Burkhead [ctb],\n James Manton [ctb],\n Jared Lander [ctb],\n Jason Punyon [ctb],\n Javier Luraschi [ctb],\n Jeff Arnold [ctb],\n Jenny Bryan [ctb],\n Jeremy Ashkenas [ctb, cph] (the CSS file at\n inst/misc/docco-classic.css),\n Jeremy Stephens [ctb],\n Jim Hester [ctb],\n Joe Cheng [ctb],\n Johannes Ranke [ctb],\n John Honaker [ctb],\n John Muschelli [ctb],\n Jonathan Keane [ctb],\n JJ Allaire [ctb],\n Johan Toloe [ctb],\n Jonathan Sidi [ctb],\n Joseph Larmarange [ctb],\n Julien Barnier [ctb],\n Kaiyin Zhong [ctb],\n Kamil Slowikowski [ctb],\n Karl Forner [ctb],\n Kevin K. Smith [ctb],\n Kirill Mueller [ctb],\n Kohske Takahashi [ctb],\n Lorenz Walthert [ctb],\n Lucas Gallindo [ctb],\n Marius Hofert [ctb],\n Martin Modrák [ctb],\n Michael Chirico [ctb],\n Michael Friendly [ctb],\n Michal Bojanowski [ctb],\n Michel Kuhlmann [ctb],\n Miller Patrick [ctb],\n Nacho Caballero [ctb],\n Nick Salkowski [ctb],\n Niels Richard Hansen [ctb],\n Noam Ross [ctb],\n Obada Mahdi [ctb],\n Pavel N. Krivitsky [ctb] (),\n Qiang Li [ctb],\n Ramnath Vaidyanathan [ctb],\n Richard Cotton [ctb],\n Robert Krzyzanowski [ctb],\n Romain Francois [ctb],\n Ruaridh Williamson [ctb],\n Scott Kostyshak [ctb],\n Sebastian Meyer [ctb],\n Sietse Brouwer [ctb],\n Simon de Bernard [ctb],\n Sylvain Rousseau [ctb],\n Taiyun Wei [ctb],\n Thibaut Assus [ctb],\n Thibaut Lamadon [ctb],\n Thomas Leeper [ctb],\n Tim Mastny [ctb],\n Tom Torsney-Weir [ctb],\n Trevor Davis [ctb],\n Viktoras Veitas [ctb],\n Weicheng Zhu [ctb],\n Wush Wu [ctb],\n Zachary Foster [ctb],\n Zhian N. Kamvar [ctb] ()", + "Maintainer": "Yihui Xie ", + "Repository": "RSPM", + "Date/Publication": "2022-04-26 23:30:05 UTC", + "Built": "R 4.1.0; ; 2022-11-07 14:36:21 UTC; unix" + } + }, + "labeling": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "labeling", + "Type": "Package", + "Title": "Axis Labeling", + "Version": "0.4.2", + "Date": "2020-10-15", + "Author": "Justin Talbot,", + "Maintainer": "Nuno Sempere ", + "Description": "Functions which provide a range of axis labeling algorithms. ", + "License": "MIT + file LICENSE | Unlimited", + "Collate": "'labeling.R'", + "NeedsCompilation": "no", + "Imports": "stats, graphics", + "Packaged": "2020-10-18 12:56:46 UTC; nuno", + "Repository": "CRAN", + "Date/Publication": "2020-10-20 07:00:09 UTC", + "Built": "R 4.1.0; ; 2022-09-07 20:17:10 UTC; unix" + } + }, + "later": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "later", + "Type": "Package", + "Title": "Utilities for Scheduling Functions to Execute Later with Event\nLoops", + "Version": "1.3.0", + "Authors@R": "c(\n person(\"Winston\", \"Chang\", role = c(\"aut\", \"cre\"), email = \"winston@rstudio.com\"),\n person(\"Joe\", \"Cheng\", role = c(\"aut\"), email = \"joe@rstudio.com\"),\n person(family = \"RStudio\", role = \"cph\"),\n person(\"Marcus\", \"Geelnard\", role = c(\"ctb\", \"cph\"), comment = \"TinyCThread library, https://tinycthread.github.io/\"),\n person(\"Evan\", \"Nemerson\", role = c(\"ctb\", \"cph\"), comment = \"TinyCThread library, https://tinycthread.github.io/\")\n )", + "Description": "Executes arbitrary R or C functions some time after the current\n time, after the R execution stack has emptied. The functions are scheduled\n in an event loop.", + "URL": "https://github.com/r-lib/later", + "BugReports": "https://github.com/r-lib/later/issues", + "License": "MIT + file LICENSE", + "Imports": "Rcpp (>= 0.12.9), rlang", + "LinkingTo": "Rcpp", + "RoxygenNote": "7.1.1", + "SystemRequirements": "C++11", + "Suggests": "knitr, rmarkdown, testthat (>= 2.1.0)", + "VignetteBuilder": "knitr", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Packaged": "2021-08-18 14:03:28 UTC; barret", + "Author": "Winston Chang [aut, cre],\n Joe Cheng [aut],\n RStudio [cph],\n Marcus Geelnard [ctb, cph] (TinyCThread library,\n https://tinycthread.github.io/),\n Evan Nemerson [ctb, cph] (TinyCThread library,\n https://tinycthread.github.io/)", + "Maintainer": "Winston Chang ", + "Repository": "CRAN", + "Date/Publication": "2021-08-18 16:30:06 UTC", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-09-02 16:39:38 UTC; unix" + } + }, + "lattice": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "lattice", + "Version": "0.20-45", + "Date": "2021-09-18", + "Priority": "recommended", + "Title": "Trellis Graphics for R", + "Authors@R": "c(person(\"Deepayan\", \"Sarkar\", role = c(\"aut\", \"cre\"),\n\t email = \"deepayan.sarkar@r-project.org\",\n\t\t comment = c(ORCID = \"0000-0003-4107-1553\")),\n person(\"Felix\", \"Andrews\", role = \"ctb\"),\n\t person(\"Kevin\", \"Wright\", role = \"ctb\", comment = \"documentation\"),\n\t person(\"Neil\", \"Klepeis\", role = \"ctb\"),\n\t person(\"Johan\", \"Larsson\", role = \"ctb\", comment = \"colorkey title\"),\n person(\"Paul\", \"Murrell\", role = \"ctb\", email = \"paul@stat.auckland.ac.nz\"))", + "Description": "A powerful and elegant high-level data visualization\n system inspired by Trellis graphics, with an emphasis on\n multivariate data. Lattice is sufficient for typical graphics needs,\n and is also flexible enough to handle most nonstandard requirements.\n See ?Lattice for an introduction.", + "Depends": "R (>= 3.0.0)", + "Suggests": "KernSmooth, MASS, latticeExtra", + "Imports": "grid, grDevices, graphics, stats, utils", + "Enhances": "chron", + "LazyLoad": "yes", + "LazyData": "yes", + "License": "GPL (>= 2)", + "URL": "http://lattice.r-forge.r-project.org/", + "BugReports": "https://github.com/deepayan/lattice/issues", + "NeedsCompilation": "yes", + "Packaged": "2021-09-22 09:17:07 UTC; deepayan", + "Author": "Deepayan Sarkar [aut, cre] (),\n Felix Andrews [ctb],\n Kevin Wright [ctb] (documentation),\n Neil Klepeis [ctb],\n Johan Larsson [ctb] (colorkey title),\n Paul Murrell [ctb]", + "Maintainer": "Deepayan Sarkar ", + "Repository": "CRAN", + "Date/Publication": "2021-09-22 12:10:02 UTC", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-11-07 14:30:55 UTC; unix" + } + }, + "latticeExtra": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "latticeExtra", + "Version": "0.6-29", + "Date": "2019-12-18", + "Title": "Extra Graphical Utilities Based on Lattice", + "Author": "Deepayan Sarkar , Felix Andrews ", + "Maintainer": "Deepayan Sarkar ", + "Description": "Building on the infrastructure provided by the lattice\n\t package, this package provides several new high-level\n\t functions and methods, as well as additional utilities\n\t such as panel and axis annotation functions.", + "Depends": "R (>= 3.6.0), lattice", + "Imports": "grid, stats, utils, grDevices, png, jpeg, RColorBrewer", + "Suggests": "maps, mapproj, deldir, tripack, quantreg, zoo, MASS, mgcv", + "URL": "http://latticeextra.r-forge.r-project.org/", + "LazyLoad": "yes", + "LazyData": "yes", + "License": "GPL (>= 2)", + "NeedsCompilation": "no", + "Packaged": "2019-12-19 13:11:49 UTC; deepayan", + "Repository": "CRAN", + "Date/Publication": "2019-12-19 13:50:05 UTC", + "Built": "R 4.1.0; ; 2022-11-05 08:14:16 UTC; unix" + } + }, + "lazyeval": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "lazyeval", + "Version": "0.2.2", + "Title": "Lazy (Non-Standard) Evaluation", + "Description": "An alternative approach to non-standard evaluation using\n formulas. Provides a full implementation of LISP style 'quasiquotation',\n making it easier to generate code with other code.", + "Authors@R": "c(\n person(\"Hadley\", \"Wickham\", ,\"hadley@rstudio.com\", c(\"aut\", \"cre\")),\n person(\"RStudio\", role = \"cph\")\n )", + "License": "GPL-3", + "LazyData": "true", + "Depends": "R (>= 3.1.0)", + "Suggests": "knitr, rmarkdown (>= 0.2.65), testthat, covr", + "VignetteBuilder": "knitr", + "RoxygenNote": "6.1.1", + "NeedsCompilation": "yes", + "Packaged": "2019-03-15 14:18:01 UTC; lionel", + "Author": "Hadley Wickham [aut, cre],\n RStudio [cph]", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN", + "Date/Publication": "2019-03-15 17:50:07 UTC", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-09-02 16:31:42 UTC; unix" + } + }, + "lifecycle": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "lifecycle", + "Title": "Manage the Life Cycle of your Package Functions", + "Version": "1.0.4", + "Authors@R": "c(\n person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = c(\"aut\", \"cre\")),\n person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\",\n comment = c(ORCID = \"0000-0003-4757-117X\")),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", + "Description": "Manage the life cycle of your exported functions with shared\n conventions, documentation badges, and user-friendly deprecation\n warnings.", + "License": "MIT + file LICENSE", + "URL": "https://lifecycle.r-lib.org/, https://github.com/r-lib/lifecycle", + "BugReports": "https://github.com/r-lib/lifecycle/issues", + "Depends": "R (>= 3.6)", + "Imports": "cli (>= 3.4.0), glue, rlang (>= 1.1.0)", + "Suggests": "covr, crayon, knitr, lintr, rmarkdown, testthat (>= 3.0.1),\ntibble, tidyverse, tools, vctrs, withr", + "VignetteBuilder": "knitr", + "Config/Needs/website": "tidyverse/tidytemplate, usethis", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.2.1", + "NeedsCompilation": "no", + "Packaged": "2023-11-06 16:07:36 UTC; lionel", + "Author": "Lionel Henry [aut, cre],\n Hadley Wickham [aut] (),\n Posit Software, PBC [cph, fnd]", + "Maintainer": "Lionel Henry ", + "Repository": "CRAN", + "Date/Publication": "2023-11-07 10:10:10 UTC", + "Built": "R 4.2.3; ; 2024-03-07 18:16:28 UTC; unix" + } + }, + "lmom": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "lmom", + "Version": "2.8", + "Date": "2019-03-11", + "Title": "L-Moments", + "Author": "J. R. M. Hosking", + "Maintainer": "J. R. M. Hosking ", + "Description": "Functions related to L-moments: computation of L-moments\n and trimmed L-moments of distributions and data samples; parameter\n estimation; L-moment ratio diagram; plot vs. quantiles of an\n extreme-value distribution.", + "Depends": "R (>= 3.0.0)", + "Imports": "stats, graphics", + "License": "Common Public License Version 1.0", + "NeedsCompilation": "yes", + "Packaged": "2019-03-12 01:04:22 UTC; J", + "Repository": "RSPM", + "Date/Publication": "2019-03-12 09:50:19 UTC", + "Encoding": "UTF-8", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-11-05 08:07:47 UTC; unix" + } + }, + "lubridate": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Type": "Package", + "Package": "lubridate", + "Title": "Make Dealing with Dates a Little Easier", + "Version": "1.8.0", + "Authors@R": "\n c(person(given = \"Vitalie\",\n family = \"Spinu\",\n role = c(\"aut\", \"cre\"),\n email = \"spinuvit@gmail.com\"),\n person(given = \"Garrett\",\n family = \"Grolemund\",\n role = \"aut\"),\n person(given = \"Hadley\",\n family = \"Wickham\",\n role = \"aut\"),\n person(given = \"Davis\",\n family = \"Vaughan\",\n role = \"ctb\"),\n person(given = \"Ian\",\n family = \"Lyttle\",\n role = \"ctb\"),\n person(given = \"Imanuel\",\n family = \"Costigan\",\n role = \"ctb\"),\n person(given = \"Jason\",\n family = \"Law\",\n role = \"ctb\"),\n person(given = \"Doug\",\n family = \"Mitarotonda\",\n role = \"ctb\"),\n person(given = \"Joseph\",\n family = \"Larmarange\",\n role = \"ctb\"),\n person(given = \"Jonathan\",\n family = \"Boiser\",\n role = \"ctb\"),\n person(given = \"Chel Hee\",\n family = \"Lee\",\n role = \"ctb\"),\n person(\"Google Inc.\", role = c(\"ctb\", \"cph\")))", + "Maintainer": "Vitalie Spinu ", + "Description": "Functions to work with date-times and time-spans:\n fast and user friendly parsing of date-time data, extraction and\n updating of components of a date-time (years, months, days, hours,\n minutes, and seconds), algebraic manipulation on date-time and\n time-span objects. The 'lubridate' package has a consistent and\n memorable syntax that makes working with dates easy and fun. Parts of\n the 'CCTZ' source code, released under the Apache 2.0 License, are\n included in this package. See for\n more details.", + "License": "GPL (>= 2)", + "URL": "https://lubridate.tidyverse.org,\nhttps://github.com/tidyverse/lubridate", + "BugReports": "https://github.com/tidyverse/lubridate/issues", + "Depends": "methods, R (>= 3.2)", + "Imports": "generics", + "Suggests": "covr, knitr, testthat (>= 2.1.0), vctrs (>= 0.3.0), rmarkdown", + "Enhances": "chron, timeDate, tis, zoo", + "LinkingTo": "cpp11 (>= 0.2.7)", + "VignetteBuilder": "knitr", + "Encoding": "UTF-8", + "LazyData": "true", + "RoxygenNote": "7.1.1", + "SystemRequirements": "C++11, A system with zoneinfo data (e.g.\n/usr/share/zoneinfo). On Windows the zoneinfo included with R\nis used.", + "Collate": "'Dates.r' 'POSIXt.r' 'util.r' 'parse.r' 'timespans.r'\n'intervals.r' 'difftimes.r' 'durations.r' 'periods.r'\n'accessors-date.R' 'accessors-day.r' 'accessors-dst.r'\n'accessors-hour.r' 'accessors-minute.r' 'accessors-month.r'\n'accessors-quarter.r' 'accessors-second.r' 'accessors-tz.r'\n'accessors-week.r' 'accessors-year.r' 'am-pm.r' 'time-zones.r'\n'numeric.r' 'coercion.r' 'constants.r' 'cpp11-wrappers.R'\n'cpp11.R' 'cyclic_encoding.r' 'data.r' 'decimal-dates.r'\n'deprecated.r' 'format_ISO8601.r' 'guess.r' 'hidden.r'\n'instants.r' 'leap-years.r' 'ops-addition.r' 'ops-compare.r'\n'ops-division.r' 'ops-integer-division.r' 'ops-m+.r'\n'ops-modulo.r' 'ops-multiplication.r' 'ops-subtraction.r'\n'package.r' 'pretty.r' 'round.r' 'stamp.r' 'tzdir.R' 'update.r'\n'vctrs.R' 'zzz.R'", + "NeedsCompilation": "yes", + "Packaged": "2021-10-03 10:14:57 UTC; vspinu", + "Author": "Vitalie Spinu [aut, cre],\n Garrett Grolemund [aut],\n Hadley Wickham [aut],\n Davis Vaughan [ctb],\n Ian Lyttle [ctb],\n Imanuel Costigan [ctb],\n Jason Law [ctb],\n Doug Mitarotonda [ctb],\n Joseph Larmarange [ctb],\n Jonathan Boiser [ctb],\n Chel Hee Lee [ctb],\n Google Inc. [ctb, cph]", + "Repository": "CRAN", + "Date/Publication": "2021-10-07 15:20:02 UTC", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-12-23 15:26:50 UTC; unix" + } + }, + "magrittr": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Type": "Package", + "Package": "magrittr", + "Title": "A Forward-Pipe Operator for R", + "Version": "2.0.3", + "Authors@R": "c(\n person(\"Stefan Milton\", \"Bache\", , \"stefan@stefanbache.dk\", role = c(\"aut\", \"cph\"),\n comment = \"Original author and creator of magrittr\"),\n person(\"Hadley\", \"Wickham\", , \"hadley@rstudio.com\", role = \"aut\"),\n person(\"Lionel\", \"Henry\", , \"lionel@rstudio.com\", role = \"cre\"),\n person(\"RStudio\", role = c(\"cph\", \"fnd\"))\n )", + "Description": "Provides a mechanism for chaining commands with a new\n forward-pipe operator, %>%. This operator will forward a value, or the\n result of an expression, into the next function call/expression.\n There is flexible support for the type of right-hand side expressions.\n For more information, see package vignette. To quote Rene Magritte,\n \"Ceci n'est pas un pipe.\"", + "License": "MIT + file LICENSE", + "URL": "https://magrittr.tidyverse.org,\nhttps://github.com/tidyverse/magrittr", + "BugReports": "https://github.com/tidyverse/magrittr/issues", + "Depends": "R (>= 3.4.0)", + "Suggests": "covr, knitr, rlang, rmarkdown, testthat", + "VignetteBuilder": "knitr", + "ByteCompile": "Yes", + "Config/Needs/website": "tidyverse/tidytemplate", + "Encoding": "UTF-8", + "RoxygenNote": "7.1.2", + "NeedsCompilation": "yes", + "Packaged": "2022-03-29 09:34:37 UTC; lionel", + "Author": "Stefan Milton Bache [aut, cph] (Original author and creator of\n magrittr),\n Hadley Wickham [aut],\n Lionel Henry [cre],\n RStudio [cph, fnd]", + "Maintainer": "Lionel Henry ", + "Repository": "CRAN", + "Date/Publication": "2022-03-30 07:30:09 UTC", + "Built": "R 4.2.3; x86_64-pc-linux-gnu; 2024-06-27 16:27:31 UTC; unix" + } + }, + "memoise": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "memoise", + "Title": "'Memoisation' of Functions", + "Version": "2.0.1", + "Authors@R": "\n c(person(given = \"Hadley\",\n family = \"Wickham\",\n role = \"aut\",\n email = \"hadley@rstudio.com\"),\n person(given = \"Jim\",\n family = \"Hester\",\n role = \"aut\"),\n person(given = \"Winston\",\n family = \"Chang\",\n role = c(\"aut\", \"cre\"),\n email = \"winston@rstudio.com\"),\n person(given = \"Kirill\",\n family = \"Müller\",\n role = \"aut\",\n email = \"krlmlr+r@mailbox.org\"),\n person(given = \"Daniel\",\n family = \"Cook\",\n role = \"aut\",\n email = \"danielecook@gmail.com\"),\n person(given = \"Mark\",\n family = \"Edmondson\",\n role = \"ctb\",\n email = \"r@sunholo.com\"))", + "Description": "Cache the results of a function so that when you\n call it again with the same arguments it returns the previously computed\n value.", + "License": "MIT + file LICENSE", + "URL": "https://memoise.r-lib.org, https://github.com/r-lib/memoise", + "BugReports": "https://github.com/r-lib/memoise/issues", + "Imports": "rlang (>= 0.4.10), cachem", + "Suggests": "digest, aws.s3, covr, googleAuthR, googleCloudStorageR, httr,\ntestthat", + "Encoding": "UTF-8", + "RoxygenNote": "7.1.2", + "NeedsCompilation": "no", + "Packaged": "2021-11-24 21:24:50 UTC; jhester", + "Author": "Hadley Wickham [aut],\n Jim Hester [aut],\n Winston Chang [aut, cre],\n Kirill Müller [aut],\n Daniel Cook [aut],\n Mark Edmondson [ctb]", + "Maintainer": "Winston Chang ", + "Repository": "CRAN", + "Date/Publication": "2021-11-26 16:11:10 UTC", + "Built": "R 4.1.0; ; 2022-09-02 16:34:30 UTC; unix" + } + }, + "mgcv": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "mgcv", + "Version": "1.8-40", + "Author": "Simon Wood ", + "Maintainer": "Simon Wood ", + "Title": "Mixed GAM Computation Vehicle with Automatic Smoothness\nEstimation", + "Description": "Generalized additive (mixed) models, some of their extensions and \n other generalized ridge regression with multiple smoothing \n parameter estimation by (Restricted) Marginal Likelihood, \n Generalized Cross Validation and similar, or using iterated \n nested Laplace approximation for fully Bayesian inference. See \n Wood (2017) for an overview. \n Includes a gam() function, a wide variety of smoothers, 'JAGS' \n support and distributions beyond the exponential family. ", + "Priority": "recommended", + "Depends": "R (>= 3.6.0), nlme (>= 3.1-64)", + "Imports": "methods, stats, graphics, Matrix, splines, utils", + "Suggests": "parallel, survival, MASS", + "LazyLoad": "yes", + "ByteCompile": "yes", + "License": "GPL (>= 2)", + "NeedsCompilation": "yes", + "Packaged": "2022-03-22 09:39:41 UTC; sw283", + "Repository": "RSPM", + "Date/Publication": "2022-03-29 09:50:02 UTC", + "Encoding": "UTF-8", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-11-07 14:39:33 UTC; unix" + } + }, + "mime": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "mime", + "Type": "Package", + "Title": "Map Filenames to MIME Types", + "Version": "0.12", + "Authors@R": "c(\n person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\")),\n person(\"Jeffrey\", \"Horner\", role = \"ctb\"),\n person(\"Beilei\", \"Bian\", role = \"ctb\")\n )", + "Description": "Guesses the MIME type from a filename extension using the data\n derived from /etc/mime.types in UNIX-type systems.", + "Imports": "tools", + "License": "GPL", + "URL": "https://github.com/yihui/mime", + "BugReports": "https://github.com/yihui/mime/issues", + "RoxygenNote": "7.1.1", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Packaged": "2021-09-28 02:06:04 UTC; yihui", + "Author": "Yihui Xie [aut, cre] (),\n Jeffrey Horner [ctb],\n Beilei Bian [ctb]", + "Maintainer": "Yihui Xie ", + "Repository": "CRAN", + "Date/Publication": "2021-09-28 05:00:05 UTC", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-09-02 16:39:18 UTC; unix" + } + }, + "munsell": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "munsell", + "Type": "Package", + "Title": "Utilities for Using Munsell Colours", + "Version": "0.5.0", + "Author": "Charlotte Wickham ", + "Maintainer": "Charlotte Wickham ", + "Description": "Provides easy access to, and manipulation of, the Munsell \n colours. Provides a mapping between Munsell's \n original notation (e.g. \"5R 5/10\") and hexadecimal strings suitable \n for use directly in R graphics. Also provides utilities \n to explore slices through the Munsell colour tree, to transform \n Munsell colours and display colour palettes.", + "Suggests": "ggplot2, testthat", + "Imports": "colorspace, methods", + "License": "MIT + file LICENSE", + "URL": "https://cran.r-project.org/package=munsell,\nhttps://github.com/cwickham/munsell/", + "RoxygenNote": "6.0.1", + "NeedsCompilation": "no", + "Packaged": "2018-06-11 23:15:15 UTC; wickhamc", + "Repository": "CRAN", + "Date/Publication": "2018-06-12 04:29:06 UTC", + "Built": "R 4.1.0; ; 2022-09-07 20:17:53 UTC; unix" + } + }, + "mvtnorm": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "mvtnorm", + "Title": "Multivariate Normal and t Distributions", + "Version": "1.1-3", + "Date": "2021-10-05", + "Authors@R": "c(person(\"Alan\", \"Genz\", role = \"aut\"),\n person(\"Frank\", \"Bretz\", role = \"aut\"),\n person(\"Tetsuhisa\", \"Miwa\", role = \"aut\"),\n person(\"Xuefei\", \"Mi\", role = \"aut\"),\n person(\"Friedrich\", \"Leisch\", role = \"ctb\"),\n person(\"Fabian\", \"Scheipl\", role = \"ctb\"),\n person(\"Bjoern\", \"Bornkamp\", role = \"ctb\", comment = c(ORCID = \"0000-0002-6294-8185\")),\n person(\"Martin\", \"Maechler\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8685-9910\")),\n person(\"Torsten\", \"Hothorn\", role = c(\"aut\", \"cre\"),\n email = \"Torsten.Hothorn@R-project.org\", comment = c(ORCID = \"0000-0001-8301-0471\")))", + "Description": "Computes multivariate normal and t probabilities, quantiles,\n random deviates and densities.", + "Imports": "stats, methods", + "Depends": "R(>= 3.5.0)", + "License": "GPL-2", + "URL": "http://mvtnorm.R-forge.R-project.org", + "NeedsCompilation": "yes", + "Packaged": "2021-10-05 14:35:36 UTC; hothorn", + "Author": "Alan Genz [aut],\n Frank Bretz [aut],\n Tetsuhisa Miwa [aut],\n Xuefei Mi [aut],\n Friedrich Leisch [ctb],\n Fabian Scheipl [ctb],\n Bjoern Bornkamp [ctb] (),\n Martin Maechler [ctb] (),\n Torsten Hothorn [aut, cre] ()", + "Maintainer": "Torsten Hothorn ", + "Repository": "CRAN", + "Date/Publication": "2021-10-08 09:50:02 UTC", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-11-05 08:08:08 UTC; unix" + } + }, + "nlme": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "nlme", + "Version": "3.1-155", + "Date": "2022-01-13", + "Priority": "recommended", + "Title": "Linear and Nonlinear Mixed Effects Models", + "Authors@R": "c(person(\"José\", \"Pinheiro\", role = \"aut\", comment = \"S version\"),\n person(\"Douglas\", \"Bates\", role = \"aut\", comment = \"up to 2007\"),\n person(\"Saikat\", \"DebRoy\", role = \"ctb\", comment = \"up to 2002\"),\n person(\"Deepayan\", \"Sarkar\", role = \"ctb\", comment = \"up to 2005\"),\n person(\"EISPACK authors\", role = \"ctb\", comment = \"src/rs.f\"),\n\t person(\"Siem\", \"Heisterkamp\", role = \"ctb\", comment = \"Author fixed sigma\"),\n person(\"Bert\", \"Van Willigen\",role = \"ctb\", comment = \"Programmer fixed sigma\"),\n person(\"Johannes\", \"Ranke\", role = \"ctb\", comment = \"varConstProp()\"),\n\t person(\"R-core\", email = \"R-core@R-project.org\",\n role = c(\"aut\", \"cre\")))", + "Contact": "see 'MailingList'", + "Description": "Fit and compare Gaussian linear and nonlinear mixed-effects models.", + "Depends": "R (>= 3.4.0)", + "Imports": "graphics, stats, utils, lattice", + "Suggests": "Hmisc, MASS", + "LazyData": "yes", + "ByteCompile": "yes", + "Encoding": "UTF-8", + "License": "GPL (>= 2) | file LICENCE", + "BugReports": "https://bugs.r-project.org", + "MailingList": "R-help@r-project.org", + "URL": "https://svn.r-project.org/R-packages/trunk/nlme/", + "NeedsCompilation": "yes", + "Packaged": "2022-01-13 08:11:17 UTC; ripley", + "Author": "José Pinheiro [aut] (S version),\n Douglas Bates [aut] (up to 2007),\n Saikat DebRoy [ctb] (up to 2002),\n Deepayan Sarkar [ctb] (up to 2005),\n EISPACK authors [ctb] (src/rs.f),\n Siem Heisterkamp [ctb] (Author fixed sigma),\n Bert Van Willigen [ctb] (Programmer fixed sigma),\n Johannes Ranke [ctb] (varConstProp()),\n R-core [aut, cre]", + "Maintainer": "R-core ", + "Repository": "CRAN", + "Date/Publication": "2022-01-13 12:06:24 UTC", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-11-07 14:29:35 UTC; unix" + } + }, + "nnet": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "nnet", + "Priority": "recommended", + "Version": "7.3-18", + "Date": "2022-09-28", + "Depends": "R (>= 3.0.0), stats, utils", + "Suggests": "MASS", + "Authors@R": "c(person(\"Brian\", \"Ripley\", role = c(\"aut\", \"cre\", \"cph\"),\n email = \"ripley@stats.ox.ac.uk\"),\n person(\"William\", \"Venables\", role = \"cph\"))", + "Description": "Software for feed-forward neural networks with a single\n hidden layer, and for multinomial log-linear models.", + "Title": "Feed-Forward Neural Networks and Multinomial Log-Linear Models", + "ByteCompile": "yes", + "License": "GPL-2 | GPL-3", + "URL": "http://www.stats.ox.ac.uk/pub/MASS4/", + "NeedsCompilation": "yes", + "Packaged": "2022-09-28 12:44:06 UTC; ripley", + "Author": "Brian Ripley [aut, cre, cph],\n William Venables [cph]", + "Maintainer": "Brian Ripley ", + "Repository": "CRAN", + "Date/Publication": "2022-09-28 12:57:31 UTC", + "Built": "R 4.2.3; x86_64-pc-linux-gnu; 2023-10-03 23:19:16 UTC; unix" + } + }, + "openssl": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "openssl", + "Type": "Package", + "Title": "Toolkit for Encryption, Signatures and Certificates Based on\nOpenSSL", + "Version": "2.1.2", + "Authors@R": "c(person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroen@berkeley.edu\",\n comment = c(ORCID = \"0000-0002-4035-0289\")),\n person(\"Oliver\", \"Keyes\", role = \"ctb\"))", + "Description": "Bindings to OpenSSL libssl and libcrypto, plus custom SSH key parsers.\n Supports RSA, DSA and EC curves P-256, P-384, P-521, and curve25519. Cryptographic\n signatures can either be created and verified manually or via x509 certificates. \n AES can be used in cbc, ctr or gcm mode for symmetric encryption; RSA for asymmetric\n (public key) encryption or EC for Diffie Hellman. High-level envelope functions \n combine RSA and AES for encrypting arbitrary sized data. Other utilities include key\n generators, hash functions (md5, sha1, sha256, etc), base64 encoder, a secure random\n number generator, and 'bignum' math methods for manually performing crypto \n calculations on large multibyte integers.", + "License": "MIT + file LICENSE", + "URL": "https://jeroen.r-universe.dev/openssl", + "BugReports": "https://github.com/jeroen/openssl/issues", + "SystemRequirements": "OpenSSL >= 1.0.2", + "VignetteBuilder": "knitr", + "Imports": "askpass", + "Suggests": "curl, testthat (>= 2.1.0), digest, knitr, rmarkdown,\njsonlite, jose, sodium", + "RoxygenNote": "7.2.3", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Packaged": "2024-04-21 20:40:22 UTC; jeroen", + "Author": "Jeroen Ooms [aut, cre] (),\n Oliver Keyes [ctb]", + "Maintainer": "Jeroen Ooms ", + "Repository": "CRAN", + "Date/Publication": "2024-04-21 21:32:40 UTC", + "Built": "R 4.2.3; x86_64-pc-linux-gnu; 2024-05-06 19:58:38 UTC; unix" + } + }, + "parsedate": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "parsedate", + "Title": "Recognize and Parse Dates in Various Formats, Including All ISO\n8601 Formats", + "Version": "1.3.0", + "Maintainer": "Gábor Csárdi ", + "Author": "Gábor Csárdi, Linus Torvalds", + "Description": "Parse dates automatically, without the need of\n specifying a format. Currently it includes the git date parser.\n It can also recognize and parse all ISO 8601 formats.", + "License": "GPL-2", + "Suggests": "covr, testthat, withr", + "URL": "https://github.com/gaborcsardi/parsedate", + "BugReports": "https://github.com/gaborcsardi/parsedate/issues", + "RoxygenNote": "6.1.1", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Packaged": "2022-02-13 11:58:44 UTC; gaborcsardi", + "Repository": "CRAN", + "Date/Publication": "2022-02-13 12:10:02 UTC", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-11-05 08:13:54 UTC; unix" + } + }, + "pillar": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "pillar", + "Title": "Coloured Formatting for Columns", + "Version": "1.9.0", + "Authors@R": "\n c(person(given = \"Kirill\",\n family = \"M\\u00fcller\",\n role = c(\"aut\", \"cre\"),\n email = \"kirill@cynkra.com\",\n comment = c(ORCID = \"0000-0002-1416-3412\")),\n person(given = \"Hadley\",\n family = \"Wickham\",\n role = \"aut\"),\n person(given = \"RStudio\",\n role = \"cph\"))", + "Description": "Provides 'pillar' and 'colonnade' generics designed\n for formatting columns of data using the full range of colours\n provided by modern terminals.", + "License": "MIT + file LICENSE", + "URL": "https://pillar.r-lib.org/, https://github.com/r-lib/pillar", + "BugReports": "https://github.com/r-lib/pillar/issues", + "Imports": "cli (>= 2.3.0), fansi, glue, lifecycle, rlang (>= 1.0.2), utf8\n(>= 1.1.0), utils, vctrs (>= 0.5.0)", + "Suggests": "bit64, DBI, debugme, DiagrammeR, dplyr, formattable, ggplot2,\nknitr, lubridate, nanotime, nycflights13, palmerpenguins,\nrmarkdown, scales, stringi, survival, testthat (>= 3.1.1),\ntibble, units (>= 0.7.2), vdiffr, withr", + "VignetteBuilder": "knitr", + "Encoding": "UTF-8", + "RoxygenNote": "7.2.3", + "Config/testthat/edition": "3", + "Config/testthat/parallel": "true", + "Config/testthat/start-first": "format_multi_fuzz, format_multi_fuzz_2,\nformat_multi, ctl_colonnade, ctl_colonnade_1, ctl_colonnade_2", + "Config/autostyle/scope": "line_breaks", + "Config/autostyle/strict": "true", + "Config/gha/extra-packages": "DiagrammeR=?ignore-before-r=3.5.0", + "Config/Needs/website": "tidyverse/tidytemplate", + "NeedsCompilation": "no", + "Packaged": "2023-03-21 08:42:46 UTC; kirill", + "Author": "Kirill Müller [aut, cre] (),\n Hadley Wickham [aut],\n RStudio [cph]", + "Maintainer": "Kirill Müller ", + "Repository": "CRAN", + "Date/Publication": "2023-03-22 08:10:02 UTC", + "Built": "R 4.2.3; ; 2024-04-02 14:44:25 UTC; unix" + } + }, + "pkgconfig": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "pkgconfig", + "Title": "Private Configuration for 'R' Packages", + "Version": "2.0.3", + "Author": "Gábor Csárdi", + "Maintainer": "Gábor Csárdi ", + "Description": "Set configuration options on a per-package basis.\n Options set by a given package only apply to that package,\n other packages are unaffected.", + "License": "MIT + file LICENSE", + "LazyData": "true", + "Imports": "utils", + "Suggests": "covr, testthat, disposables (>= 1.0.3)", + "URL": "https://github.com/r-lib/pkgconfig#readme", + "BugReports": "https://github.com/r-lib/pkgconfig/issues", + "Encoding": "UTF-8", + "NeedsCompilation": "no", + "Packaged": "2019-09-22 08:42:40 UTC; gaborcsardi", + "Repository": "CRAN", + "Date/Publication": "2019-09-22 09:20:02 UTC", + "Built": "R 4.1.0; ; 2022-09-02 16:34:33 UTC; unix" + } + }, + "plogr": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "plogr", + "Title": "The 'plog' C++ Logging Library", + "Version": "0.2.0", + "Date": "2018-03-24", + "Authors@R": "c(\n person(\"Kirill\", \"Müller\", role = c(\"aut\", \"cre\"), email = \"krlmlr+r@mailbox.org\"),\n person(\"Sergey\", \"Podobry\", role = \"cph\", comment = \"Author of the bundled plog library\"))", + "Description": "\n A simple header-only logging library for C++.\n Add 'LinkingTo: plogr' to 'DESCRIPTION', and '#include ' in your C++ modules to use it.", + "Suggests": "Rcpp", + "License": "MIT + file LICENSE", + "Encoding": "UTF-8", + "LazyData": "true", + "URL": "https://github.com/krlmlr/plogr#readme", + "BugReports": "https://github.com/krlmlr/plogr/issues", + "RoxygenNote": "6.0.1.9000", + "NeedsCompilation": "no", + "Packaged": "2018-03-24 11:02:06 UTC; muelleki", + "Author": "Kirill Müller [aut, cre],\n Sergey Podobry [cph] (Author of the bundled plog library)", + "Maintainer": "Kirill Müller ", + "Repository": "CRAN", + "Date/Publication": "2018-03-25 15:25:27 UTC", + "Built": "R 4.1.0; ; 2022-09-02 16:35:24 UTC; unix" + } + }, + "plotly": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "plotly", + "Title": "Create Interactive Web Graphics via 'plotly.js'", + "Version": "4.10.0", + "Authors@R": "c(person(\"Carson\", \"Sievert\", role = c(\"aut\", \"cre\"),\n email = \"cpsievert1@gmail.com\", comment = c(ORCID = \"0000-0002-4958-2844\")),\n person(\"Chris\", \"Parmer\", role = \"aut\",\n email = \"chris@plot.ly\"),\n person(\"Toby\", \"Hocking\", role = \"aut\",\n email = \"tdhock5@gmail.com\"),\n person(\"Scott\", \"Chamberlain\", role = \"aut\",\n email = \"myrmecocystus@gmail.com\"),\n person(\"Karthik\", \"Ram\", role = \"aut\",\n email = \"karthik.ram@gmail.com\"),\n person(\"Marianne\", \"Corvellec\", role = \"aut\",\n email = \"marianne.corvellec@igdore.org\", comment = c(ORCID = \"0000-0002-1994-3581\")),\n person(\"Pedro\", \"Despouy\", role = \"aut\",\n email = \"pedro@plot.ly\"),\n person(\"Salim\", \"Brüggemann\", role = \"ctb\",\n email = \"salim-b@pm.me\", comment = c(ORCID = \"0000-0002-5329-5987\")),\n person(\"Plotly Technologies Inc.\", role = \"cph\"))", + "License": "MIT + file LICENSE", + "Description": "Create interactive web graphics from 'ggplot2' graphs and/or a custom interface to the (MIT-licensed) JavaScript library 'plotly.js' inspired by the grammar of graphics.", + "URL": "https://plotly-r.com, https://github.com/plotly/plotly.R,\nhttps://plotly.com/r/", + "BugReports": "https://github.com/plotly/plotly.R/issues", + "Depends": "R (>= 3.2.0), ggplot2 (>= 3.0.0)", + "Imports": "tools, scales, httr (>= 1.3.0), jsonlite (>= 1.6), magrittr,\ndigest, viridisLite, base64enc, htmltools (>= 0.3.6),\nhtmlwidgets (>= 1.5.2.9001), tidyr (>= 1.0.0), RColorBrewer,\ndplyr, vctrs, tibble, lazyeval (>= 0.2.0), rlang (>= 0.4.10),\ncrosstalk, purrr, data.table, promises", + "Suggests": "MASS, maps, hexbin, ggthemes, GGally, testthat, knitr,\ndevtools, shiny (>= 1.1.0), shinytest (>= 1.3.0), curl,\nrmarkdown, Cairo, broom, webshot, listviewer, dendextend,\nmaptools, rgeos, sf, png, IRdisplay, processx, plotlyGeoAssets,\nforcats, palmerpenguins, rversions, reticulate", + "LazyData": "true", + "RoxygenNote": "7.1.2", + "Encoding": "UTF-8", + "NeedsCompilation": "no", + "Packaged": "2021-10-08 19:08:31 UTC; cpsievert", + "Author": "Carson Sievert [aut, cre] (),\n Chris Parmer [aut],\n Toby Hocking [aut],\n Scott Chamberlain [aut],\n Karthik Ram [aut],\n Marianne Corvellec [aut] (),\n Pedro Despouy [aut],\n Salim Brüggemann [ctb] (),\n Plotly Technologies Inc. [cph]", + "Maintainer": "Carson Sievert ", + "Repository": "CRAN", + "Date/Publication": "2021-10-09 21:10:07 UTC", + "Built": "R 4.1.0; ; 2022-09-07 20:28:46 UTC; unix" + } + }, + "plyr": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "plyr", + "Title": "Tools for Splitting, Applying and Combining Data", + "Version": "1.8.9", + "Authors@R": "\n person(\"Hadley\", \"Wickham\", , \"hadley@rstudio.com\", role = c(\"aut\", \"cre\"))", + "Description": "A set of tools that solves a common set of problems: you need\n to break a big problem down into manageable pieces, operate on each\n piece and then put all the pieces back together. For example, you\n might want to fit a model to each spatial location or time point in\n your study, summarise data by panels or collapse high-dimensional\n arrays to simpler summary statistics. The development of 'plyr' has\n been generously supported by 'Becton Dickinson'.", + "License": "MIT + file LICENSE", + "URL": "http://had.co.nz/plyr, https://github.com/hadley/plyr", + "BugReports": "https://github.com/hadley/plyr/issues", + "Depends": "R (>= 3.1.0)", + "Imports": "Rcpp (>= 0.11.0)", + "Suggests": "abind, covr, doParallel, foreach, iterators, itertools,\ntcltk, testthat", + "LinkingTo": "Rcpp", + "Encoding": "UTF-8", + "LazyData": "true", + "RoxygenNote": "7.2.3", + "NeedsCompilation": "yes", + "Packaged": "2023-09-27 13:58:04 UTC; hadleywickham", + "Author": "Hadley Wickham [aut, cre]", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN", + "Date/Publication": "2023-10-02 06:50:08 UTC", + "Built": "R 4.2.3; x86_64-pc-linux-gnu; 2023-10-20 19:04:18 UTC; unix" + } + }, + "png": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "png", + "Version": "0.1-7", + "Title": "Read and write PNG images", + "Author": "Simon Urbanek ", + "Maintainer": "Simon Urbanek ", + "Depends": "R (>= 2.9.0)", + "Description": "This package provides an easy and simple way to read, write and display bitmap images stored in the PNG format. It can read and write both files and in-memory raw vectors.", + "License": "GPL-2 | GPL-3", + "SystemRequirements": "libpng", + "URL": "http://www.rforge.net/png/", + "Packaged": "2013-12-03 20:09:14 UTC; svnuser", + "NeedsCompilation": "yes", + "Repository": "CRAN", + "Date/Publication": "2013-12-03 22:25:05", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-11-05 08:13:19 UTC; unix" + } + }, + "prettyunits": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "prettyunits", + "Title": "Pretty, Human Readable Formatting of Quantities", + "Version": "1.1.1", + "Author": "Gabor Csardi", + "Maintainer": "Gabor Csardi ", + "Description": "Pretty, human readable formatting of quantities.\n Time intervals: '1337000' -> '15d 11h 23m 20s'.\n Vague time intervals: '2674000' -> 'about a month ago'.\n Bytes: '1337' -> '1.34 kB'.", + "License": "MIT + file LICENSE", + "LazyData": "true", + "URL": "https://github.com/gaborcsardi/prettyunits", + "BugReports": "https://github.com/gaborcsardi/prettyunits/issues", + "Suggests": "codetools, covr, testthat", + "RoxygenNote": "7.0.2", + "Encoding": "UTF-8", + "NeedsCompilation": "no", + "Packaged": "2020-01-24 02:16:46 UTC; gaborcsardi", + "Repository": "CRAN", + "Date/Publication": "2020-01-24 06:50:07 UTC", + "Built": "R 4.1.0; ; 2022-10-17 18:30:11 UTC; unix" + } + }, + "progress": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "progress", + "Title": "Terminal Progress Bars", + "Version": "1.2.2", + "Author": "Gábor Csárdi [aut, cre], Rich FitzJohn [aut]", + "Maintainer": "Gábor Csárdi ", + "Description": "Configurable Progress bars, they may include percentage,\n elapsed time, and/or the estimated completion time. They work in\n terminals, in 'Emacs' 'ESS', 'RStudio', 'Windows' 'Rgui' and the\n 'macOS' 'R.app'. The package also provides a 'C++' 'API', that works\n with or without 'Rcpp'.", + "License": "MIT + file LICENSE", + "LazyData": "true", + "URL": "https://github.com/r-lib/progress#readme", + "BugReports": "https://github.com/r-lib/progress/issues", + "Imports": "hms, prettyunits, R6, crayon", + "Suggests": "Rcpp, testthat, withr", + "RoxygenNote": "6.1.0", + "Encoding": "UTF-8", + "NeedsCompilation": "no", + "Packaged": "2019-05-15 20:28:47 UTC; gaborcsardi", + "Repository": "CRAN", + "Date/Publication": "2019-05-16 21:30:03 UTC", + "Built": "R 4.1.0; ; 2022-11-05 08:14:08 UTC; unix" + } + }, + "promises": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "promises", + "Type": "Package", + "Title": "Abstractions for Promise-Based Asynchronous Programming", + "Version": "1.2.0.1", + "Authors@R": "c(\n person(\"Joe\", \"Cheng\", email = \"joe@rstudio.com\", role = c(\"aut\", \"cre\")),\n person(\"RStudio\", role = c(\"cph\", \"fnd\"))\n )", + "Description": "Provides fundamental abstractions for doing asynchronous programming\n in R using promises. Asynchronous programming is useful for allowing a single\n R process to orchestrate multiple tasks in the background while also attending\n to something else. Semantics are similar to 'JavaScript' promises, but with a\n syntax that is idiomatic R.", + "License": "MIT + file LICENSE", + "Imports": "R6, Rcpp, later, rlang, stats, magrittr", + "Suggests": "testthat, future (>= 1.21.0), fastmap (>= 1.1.0), purrr,\nknitr, rmarkdown, vembedr, spelling", + "LinkingTo": "later, Rcpp", + "RoxygenNote": "7.1.1", + "Encoding": "UTF-8", + "LazyData": "true", + "VignetteBuilder": "knitr", + "URL": "https://rstudio.github.io/promises/,\nhttps://github.com/rstudio/promises", + "BugReports": "https://github.com/rstudio/promises/issues", + "Language": "en-US", + "NeedsCompilation": "yes", + "Packaged": "2021-02-11 18:18:47 UTC; barret", + "Author": "Joe Cheng [aut, cre],\n RStudio [cph, fnd]", + "Maintainer": "Joe Cheng ", + "Repository": "CRAN", + "Date/Publication": "2021-02-11 19:00:02 UTC", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-09-02 16:33:01 UTC; unix" + } + }, + "proxy": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "proxy", + "Type": "Package", + "Title": "Distance and Similarity Measures", + "Version": "0.4-26", + "Authors@R": "c(person(given = \"David\", family = \"Meyer\", role = c(\"aut\", \"cre\"), email = \"David.Meyer@R-project.org\"),\n person(given = \"Christian\", family = \"Buchta\", role = \"aut\"))", + "Description": "Provides an extensible framework for the efficient calculation of auto- and cross-proximities, along with implementations of the most popular ones. ", + "Depends": "R (>= 3.4.0)", + "Imports": "stats, utils", + "Suggests": "cba", + "Collate": "registry.R database.R dist.R similarities.R dissimilarities.R\nutil.R seal.R", + "License": "GPL-2", + "NeedsCompilation": "yes", + "Packaged": "2021-06-06 14:08:54 UTC; meyer", + "Author": "David Meyer [aut, cre],\n Christian Buchta [aut]", + "Maintainer": "David Meyer ", + "Repository": "CRAN", + "Date/Publication": "2021-06-07 22:10:02 UTC", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-11-05 08:07:31 UTC; unix" + } + }, + "purrr": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "purrr", + "Title": "Functional Programming Tools", + "Version": "1.0.2", + "Authors@R": "c(\n person(\"Hadley\", \"Wickham\", , \"hadley@rstudio.com\", role = c(\"aut\", \"cre\"),\n comment = c(ORCID = \"0000-0003-4757-117X\")),\n person(\"Lionel\", \"Henry\", , \"lionel@rstudio.com\", role = \"aut\"),\n person(\"RStudio\", role = c(\"cph\", \"fnd\"))\n )", + "Description": "A complete and consistent functional programming toolkit for\n R.", + "License": "MIT + file LICENSE", + "URL": "https://purrr.tidyverse.org/, https://github.com/tidyverse/purrr", + "BugReports": "https://github.com/tidyverse/purrr/issues", + "Depends": "R (>= 3.5.0)", + "Imports": "cli (>= 3.6.1), lifecycle (>= 1.0.3), magrittr (>= 1.5.0),\nrlang (>= 1.1.1), vctrs (>= 0.6.3)", + "Suggests": "covr, dplyr (>= 0.7.8), httr, knitr, lubridate, rmarkdown,\ntestthat (>= 3.0.0), tibble, tidyselect", + "LinkingTo": "cli", + "VignetteBuilder": "knitr", + "Biarch": "true", + "Config/Needs/website": "tidyverse/tidytemplate, tidyr", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.2.3", + "NeedsCompilation": "yes", + "Packaged": "2023-08-08 16:13:31 UTC; hadleywickham", + "Author": "Hadley Wickham [aut, cre] (),\n Lionel Henry [aut],\n RStudio [cph, fnd]", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN", + "Date/Publication": "2023-08-10 08:20:07 UTC", + "Built": "R 4.2.3; x86_64-pc-linux-gnu; 2024-05-08 13:27:37 UTC; unix" + } + }, + "rappdirs": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Type": "Package", + "Package": "rappdirs", + "Title": "Application Directories: Determine Where to Save Data, Caches,\nand Logs", + "Version": "0.3.3", + "Authors@R": "\n c(person(given = \"Hadley\",\n family = \"Wickham\",\n role = c(\"trl\", \"cre\", \"cph\"),\n email = \"hadley@rstudio.com\"),\n person(given = \"RStudio\",\n role = \"cph\"),\n person(given = \"Sridhar\",\n family = \"Ratnakumar\",\n role = \"aut\"),\n person(given = \"Trent\",\n family = \"Mick\",\n role = \"aut\"),\n person(given = \"ActiveState\",\n role = \"cph\",\n comment = \"R/appdir.r, R/cache.r, R/data.r, R/log.r translated from appdirs\"),\n person(given = \"Eddy\",\n family = \"Petrisor\",\n role = \"ctb\"),\n person(given = \"Trevor\",\n family = \"Davis\",\n role = c(\"trl\", \"aut\")),\n person(given = \"Gabor\",\n family = \"Csardi\",\n role = \"ctb\"),\n person(given = \"Gregory\",\n family = \"Jefferis\",\n role = \"ctb\"))", + "Description": "An easy way to determine which directories on the\n users computer you should use to save data, caches and logs. A port of\n Python's 'Appdirs' () to\n R.", + "License": "MIT + file LICENSE", + "URL": "https://rappdirs.r-lib.org, https://github.com/r-lib/rappdirs", + "BugReports": "https://github.com/r-lib/rappdirs/issues", + "Depends": "R (>= 3.2)", + "Suggests": "roxygen2, testthat (>= 3.0.0), covr, withr", + "Copyright": "Original python appdirs module copyright (c) 2010\nActiveState Software Inc. R port copyright Hadley Wickham,\nRStudio. See file LICENSE for details.", + "Encoding": "UTF-8", + "RoxygenNote": "7.1.1", + "Config/testthat/edition": "3", + "NeedsCompilation": "yes", + "Packaged": "2021-01-28 22:29:57 UTC; hadley", + "Author": "Hadley Wickham [trl, cre, cph],\n RStudio [cph],\n Sridhar Ratnakumar [aut],\n Trent Mick [aut],\n ActiveState [cph] (R/appdir.r, R/cache.r, R/data.r, R/log.r translated\n from appdirs),\n Eddy Petrisor [ctb],\n Trevor Davis [trl, aut],\n Gabor Csardi [ctb],\n Gregory Jefferis [ctb]", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN", + "Date/Publication": "2021-01-31 05:40:02 UTC", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-09-02 16:41:45 UTC; unix" + } + }, + "readr": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "readr", + "Title": "Read Rectangular Text Data", + "Version": "2.1.2", + "Authors@R": "c(\n person(\"Hadley\", \"Wickham\", , \"hadley@rstudio.com\", role = \"aut\"),\n person(\"Jim\", \"Hester\", role = \"aut\"),\n person(\"Romain\", \"Francois\", role = \"ctb\"),\n person(\"Jennifer\", \"Bryan\", , \"jenny@rstudio.com\", role = c(\"aut\", \"cre\"),\n comment = c(ORCID = \"0000-0002-6983-2759\")),\n person(\"Shelby\", \"Bearrows\", role = \"ctb\"),\n person(\"RStudio\", role = c(\"cph\", \"fnd\")),\n person(\"https://github.com/mandreyel/\", role = \"cph\",\n comment = \"mio library\"),\n person(\"Jukka\", \"Jylänki\", role = c(\"ctb\", \"cph\"),\n comment = \"grisu3 implementation\"),\n person(\"Mikkel\", \"Jørgensen\", role = c(\"ctb\", \"cph\"),\n comment = \"grisu3 implementation\")\n )", + "Description": "The goal of 'readr' is to provide a fast and friendly way to\n read rectangular data (like 'csv', 'tsv', and 'fwf'). It is designed\n to flexibly parse many types of data found in the wild, while still\n cleanly failing when data unexpectedly changes.", + "License": "MIT + file LICENSE", + "URL": "https://readr.tidyverse.org, https://github.com/tidyverse/readr", + "BugReports": "https://github.com/tidyverse/readr/issues", + "Depends": "R (>= 3.1)", + "Imports": "cli (>= 3.0.0), clipr, crayon, hms (>= 0.4.1), lifecycle (>=\n0.2.0), methods, R6, rlang, tibble, utils, vroom (>= 1.5.6)", + "Suggests": "covr, curl, datasets, knitr, rmarkdown, spelling, stringi,\ntestthat (>= 3.1.2), tzdb (>= 0.1.1), waldo, withr, xml2", + "LinkingTo": "cpp11, tzdb (>= 0.1.1)", + "VignetteBuilder": "knitr", + "Config/Needs/website": "tidyverse, tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/testthat/parallel": "false", + "Encoding": "UTF-8", + "Language": "en-US", + "RoxygenNote": "7.1.2", + "SystemRequirements": "C++11", + "NeedsCompilation": "yes", + "Packaged": "2022-01-30 04:52:26 UTC; jenny", + "Author": "Hadley Wickham [aut],\n Jim Hester [aut],\n Romain Francois [ctb],\n Jennifer Bryan [aut, cre] (),\n Shelby Bearrows [ctb],\n RStudio [cph, fnd],\n https://github.com/mandreyel/ [cph] (mio library),\n Jukka Jylänki [ctb, cph] (grisu3 implementation),\n Mikkel Jørgensen [ctb, cph] (grisu3 implementation)", + "Maintainer": "Jennifer Bryan ", + "Repository": "CRAN", + "Date/Publication": "2022-01-30 22:30:02 UTC", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-11-05 08:17:30 UTC; unix" + } + }, + "readxl": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "readxl", + "Title": "Read Excel Files", + "Version": "1.4.0", + "Authors@R": "c(\n person(\"Hadley\", \"Wickham\", , \"hadley@rstudio.com\", role = \"aut\",\n comment = c(ORCID = \"0000-0003-4757-117X\")),\n person(\"Jennifer\", \"Bryan\", , \"jenny@rstudio.com\", role = c(\"aut\", \"cre\"),\n comment = c(ORCID = \"0000-0002-6983-2759\")),\n person(\"RStudio\", role = c(\"cph\", \"fnd\"),\n comment = \"Copyright holder of all R code and all C/C++ code without explicit copyright attribution\"),\n person(\"Marcin\", \"Kalicinski\", role = c(\"ctb\", \"cph\"),\n comment = \"Author of included RapidXML code\"),\n person(\"Komarov Valery\", role = c(\"ctb\", \"cph\"),\n comment = \"Author of included libxls code\"),\n person(\"Christophe Leitienne\", role = c(\"ctb\", \"cph\"),\n comment = \"Author of included libxls code\"),\n person(\"Bob Colbert\", role = c(\"ctb\", \"cph\"),\n comment = \"Author of included libxls code\"),\n person(\"David Hoerl\", role = c(\"ctb\", \"cph\"),\n comment = \"Author of included libxls code\"),\n person(\"Evan Miller\", role = c(\"ctb\", \"cph\"),\n comment = \"Author of included libxls code\")\n )", + "Description": "Import excel files into R. Supports '.xls' via the embedded\n 'libxls' C library and '.xlsx' via\n the embedded 'RapidXML' C++ library .\n Works on Windows, Mac and Linux without external dependencies.", + "License": "MIT + file LICENSE", + "URL": "https://readxl.tidyverse.org, https://github.com/tidyverse/readxl", + "BugReports": "https://github.com/tidyverse/readxl/issues", + "Depends": "R (>= 3.4)", + "Imports": "cellranger, tibble (>= 2.0.1), utils", + "Suggests": "knitr, rmarkdown, testthat (>= 3.0.0)", + "LinkingTo": "cpp11 (>= 0.4.0), progress", + "VignetteBuilder": "knitr", + "Config/Needs/website": "tidyverse/tidytemplate, tidyverse, devtools", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "Note": "libxls v1.6.2 4482400", + "RoxygenNote": "7.1.2", + "SystemRequirements": "C++11", + "NeedsCompilation": "yes", + "Packaged": "2022-03-28 17:49:29 UTC; jenny", + "Author": "Hadley Wickham [aut] (),\n Jennifer Bryan [aut, cre] (),\n RStudio [cph, fnd] (Copyright holder of all R code and all C/C++ code\n without explicit copyright attribution),\n Marcin Kalicinski [ctb, cph] (Author of included RapidXML code),\n Komarov Valery [ctb, cph] (Author of included libxls code),\n Christophe Leitienne [ctb, cph] (Author of included libxls code),\n Bob Colbert [ctb, cph] (Author of included libxls code),\n David Hoerl [ctb, cph] (Author of included libxls code),\n Evan Miller [ctb, cph] (Author of included libxls code)", + "Maintainer": "Jennifer Bryan ", + "Repository": "RSPM", + "Date/Publication": "2022-03-28 18:30:02 UTC", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-11-05 08:16:27 UTC; unix" + } + }, + "rematch": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "rematch", + "Title": "Match Regular Expressions with a Nicer 'API'", + "Version": "1.0.1", + "Author": "Gabor Csardi", + "Maintainer": "Gabor Csardi ", + "Description": "A small wrapper on 'regexpr' to extract the matches and\n captured groups from the match of a regular expression to a character\n vector.", + "License": "MIT + file LICENSE", + "LazyData": "true", + "URL": "https://github.com/MangoTheCat/rematch", + "BugReports": "https://github.com/MangoTheCat/rematch/issues", + "RoxygenNote": "5.0.1.9000", + "Suggests": "covr, testthat", + "Encoding": "UTF-8", + "NeedsCompilation": "no", + "Packaged": "2016-04-20 19:54:37 UTC; gaborcsardi", + "Repository": "CRAN", + "Date/Publication": "2016-04-21 08:20:46", + "Built": "R 4.1.0; ; 2022-11-05 08:07:36 UTC; unix" + } + }, + "reshape2": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "reshape2", + "Title": "Flexibly Reshape Data: A Reboot of the Reshape Package", + "Version": "1.4.4", + "Author": "Hadley Wickham ", + "Maintainer": "Hadley Wickham ", + "Description": "Flexibly restructure and aggregate data using just two\n functions: melt and 'dcast' (or 'acast').", + "License": "MIT + file LICENSE", + "URL": "https://github.com/hadley/reshape", + "BugReports": "https://github.com/hadley/reshape/issues", + "Depends": "R (>= 3.1)", + "Imports": "plyr (>= 1.8.1), Rcpp, stringr", + "Suggests": "covr, lattice, testthat (>= 0.8.0)", + "LinkingTo": "Rcpp", + "Encoding": "UTF-8", + "LazyData": "true", + "RoxygenNote": "7.1.0", + "NeedsCompilation": "yes", + "Packaged": "2020-04-09 12:27:19 UTC; hadley", + "Repository": "CRAN", + "Date/Publication": "2020-04-09 13:50:02 UTC", + "Built": "R 4.2.3; x86_64-pc-linux-gnu; 2024-08-20 14:06:46 UTC; unix" + } + }, + "reticulate": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "reticulate", + "Type": "Package", + "Title": "Interface to 'Python'", + "Version": "1.24", + "Authors@R": "c(\n person(\"Kevin\", \"Ushey\", role = c(\"aut\", \"cre\"),\n email = \"kevin@rstudio.com\"),\n person(\"JJ\", \"Allaire\", role = c(\"aut\"), email = \"jj@rstudio.com\"),\n person(\"RStudio\", role = c(\"cph\", \"fnd\")),\n person(\"Yuan\", \"Tang\", role = c(\"aut\", \"cph\"),\n email = \"terrytangyuan@gmail.com\",\n comment = c(ORCID = \"0000-0001-5243-233X\")),\n person(\"Dirk\", \"Eddelbuettel\", role = c(\"ctb\", \"cph\"),\n email = \"edd@debian.org\"),\n person(\"Bryan\", \"Lewis\", role = c(\"ctb\", \"cph\"),\n email = \"blewis@illposed.net\"),\n person(\"Sigrid\", \"Keydana\", role = c(\"ctb\"),\n email = \"sigrid@rstudio.com\"),\n person(\"Ryan\", \"Hafen\", role = c(\"ctb\", \"cph\"),\n email = \"rhafen@gmail.com\"),\n person(\"Marcus\", \"Geelnard\", role = c(\"ctb\", \"cph\"),\n comment = \"TinyThread library, http://tinythreadpp.bitsnbites.eu/\")\n )", + "Description": "Interface to 'Python' modules, classes, and functions. When calling\n into 'Python', R data types are automatically converted to their equivalent 'Python'\n types. When values are returned from 'Python' to R they are converted back to R\n types. Compatible with all versions of 'Python' >= 2.7.", + "License": "Apache License 2.0", + "URL": "https://rstudio.github.io/reticulate/,\nhttps://github.com/rstudio/reticulate", + "BugReports": "https://github.com/rstudio/reticulate/issues", + "SystemRequirements": "Python (>= 2.7.0)", + "Encoding": "UTF-8", + "Depends": "R (>= 3.0)", + "Imports": "Matrix, Rcpp (>= 0.12.7), RcppTOML, graphics, here, jsonlite,\nmethods, png, rappdirs, utils, withr", + "Suggests": "callr, knitr, rlang, rmarkdown, testthat", + "LinkingTo": "Rcpp", + "RoxygenNote": "7.1.2", + "VignetteBuilder": "knitr", + "NeedsCompilation": "yes", + "Packaged": "2022-01-24 21:55:15 UTC; kevin", + "Author": "Kevin Ushey [aut, cre],\n JJ Allaire [aut],\n RStudio [cph, fnd],\n Yuan Tang [aut, cph] (),\n Dirk Eddelbuettel [ctb, cph],\n Bryan Lewis [ctb, cph],\n Sigrid Keydana [ctb],\n Ryan Hafen [ctb, cph],\n Marcus Geelnard [ctb, cph] (TinyThread library,\n http://tinythreadpp.bitsnbites.eu/)", + "Maintainer": "Kevin Ushey ", + "Repository": "CRAN", + "Date/Publication": "2022-01-26 10:52:41 UTC", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-11-05 08:14:41 UTC; unix" + } + }, + "rlang": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "rlang", + "Version": "1.1.1", + "Title": "Functions for Base Types and Core R and 'Tidyverse' Features", + "Description": "A toolbox for working with base types, core R features\n like the condition system, and core 'Tidyverse' features like tidy\n evaluation.", + "Authors@R": "c(\n person(\"Lionel\", \"Henry\", ,\"lionel@posit.co\", c(\"aut\", \"cre\")),\n person(\"Hadley\", \"Wickham\", ,\"hadley@posit.co\", \"aut\"),\n person(given = \"mikefc\",\n email = \"mikefc@coolbutuseless.com\", \n role = \"cph\", \n comment = \"Hash implementation based on Mike's xxhashlite\"),\n person(given = \"Yann\",\n family = \"Collet\",\n role = \"cph\", \n comment = \"Author of the embedded xxHash library\"),\n person(given = \"Posit, PBC\", role = c(\"cph\", \"fnd\"))\n )", + "License": "MIT + file LICENSE", + "ByteCompile": "true", + "Biarch": "true", + "Depends": "R (>= 3.5.0)", + "Imports": "utils", + "Suggests": "cli (>= 3.1.0), covr, crayon, fs, glue, knitr, magrittr,\nmethods, pillar, rmarkdown, stats, testthat (>= 3.0.0), tibble,\nusethis, vctrs (>= 0.2.3), withr", + "Enhances": "winch", + "Encoding": "UTF-8", + "RoxygenNote": "7.2.3", + "URL": "https://rlang.r-lib.org, https://github.com/r-lib/rlang", + "BugReports": "https://github.com/r-lib/rlang/issues", + "Config/testthat/edition": "3", + "Config/Needs/website": "dplyr, tidyverse/tidytemplate", + "NeedsCompilation": "yes", + "Packaged": "2023-04-28 10:48:43 UTC; lionel", + "Author": "Lionel Henry [aut, cre],\n Hadley Wickham [aut],\n mikefc [cph] (Hash implementation based on Mike's xxhashlite),\n Yann Collet [cph] (Author of the embedded xxHash library),\n Posit, PBC [cph, fnd]", + "Maintainer": "Lionel Henry ", + "Repository": "CRAN", + "Date/Publication": "2023-04-28 22:30:03 UTC", + "Built": "R 4.2.3; x86_64-pc-linux-gnu; 2023-07-25 12:52:17 UTC; unix" + } + }, + "rmarkdown": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Type": "Package", + "Package": "rmarkdown", + "Title": "Dynamic Documents for R", + "Version": "2.14", + "Authors@R": "c(\n person(\"JJ\", \"Allaire\", , \"jj@rstudio.com\", role = \"aut\"),\n person(\"Yihui\", \"Xie\", , \"xie@yihui.name\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-0645-5666\")),\n person(\"Jonathan\", \"McPherson\", , \"jonathan@rstudio.com\", role = \"aut\"),\n person(\"Javier\", \"Luraschi\", , \"javier@rstudio.com\", role = \"aut\"),\n person(\"Kevin\", \"Ushey\", , \"kevin@rstudio.com\", role = \"aut\"),\n person(\"Aron\", \"Atkins\", , \"aron@rstudio.com\", role = \"aut\"),\n person(\"Hadley\", \"Wickham\", , \"hadley@rstudio.com\", role = \"aut\"),\n person(\"Joe\", \"Cheng\", , \"joe@rstudio.com\", role = \"aut\"),\n person(\"Winston\", \"Chang\", , \"winston@rstudio.com\", role = \"aut\"),\n person(\"Richard\", \"Iannone\", , \"rich@rstudio.com\", role = \"aut\", comment = c(ORCID = \"0000-0003-3925-190X\")),\n person(\"Andrew\", \"Dunning\", role = \"ctb\", comment = c(ORCID = \"0000-0003-0464-5036\")),\n person(\"Atsushi\", \"Yasumoto\", role = c(\"ctb\", \"cph\"), comment = c(ORCID = \"0000-0002-8335-495X\", cph = \"Number sections Lua filter\")),\n person(\"Barret\", \"Schloerke\", role = \"ctb\"),\n person(\"Carson\", \"Sievert\", role = \"ctb\", comment = c(ORCID = \"0000-0002-4958-2844\")), \n person(\"Christophe\", \"Dervieux\", role = \"ctb\"),\n person(\"Devon\", \"Ryan\", , \"dpryan79@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8549-0971\")),\n person(\"Frederik\", \"Aust\", , \"frederik.aust@uni-koeln.de\", role = \"ctb\", comment = c(ORCID = \"0000-0003-4900-788X\")),\n person(\"Jeff\", \"Allen\", , \"jeff@rstudio.com\", role = \"ctb\"), \n person(\"JooYoung\", \"Seo\", role = \"ctb\", comment = c(ORCID = \"0000-0002-4064-6012\")),\n person(\"Malcolm\", \"Barrett\", role = \"ctb\"),\n person(\"Rob\", \"Hyndman\", , \"Rob.Hyndman@monash.edu\", role = \"ctb\"),\n person(\"Romain\", \"Lesur\", role = \"ctb\"),\n person(\"Roy\", \"Storey\", role = \"ctb\"),\n person(\"Ruben\", \"Arslan\", , \"ruben.arslan@uni-goettingen.de\", role = \"ctb\"),\n person(\"Sergio\", \"Oller\", role = \"ctb\"),\n person(, \"RStudio, PBC\", role = \"cph\"),\n person(, \"jQuery UI contributors\", role = c(\"ctb\", \"cph\"), comment = \"jQuery UI library; authors listed in inst/rmd/h/jqueryui-AUTHORS.txt\"),\n person(\"Mark\", \"Otto\", role = \"ctb\", comment = \"Bootstrap library\"),\n person(\"Jacob\", \"Thornton\", role = \"ctb\", comment = \"Bootstrap library\"),\n person(, \"Bootstrap contributors\", role = \"ctb\", comment = \"Bootstrap library\"),\n person(, \"Twitter, Inc\", role = \"cph\", comment = \"Bootstrap library\"),\n person(\"Alexander\", \"Farkas\", role = c(\"ctb\", \"cph\"), comment = \"html5shiv library\"),\n person(\"Scott\", \"Jehl\", role = c(\"ctb\", \"cph\"), comment = \"Respond.js library\"),\n person(\"Ivan\", \"Sagalaev\", role = c(\"ctb\", \"cph\"), comment = \"highlight.js library\"),\n person(\"Greg\", \"Franko\", role = c(\"ctb\", \"cph\"), comment = \"tocify library\"),\n person(\"John\", \"MacFarlane\", role = c(\"ctb\", \"cph\"), comment = \"Pandoc templates\"),\n person(, \"Google, Inc.\", role = c(\"ctb\", \"cph\"), comment = \"ioslides library\"),\n person(\"Dave\", \"Raggett\", role = \"ctb\", comment = \"slidy library\"),\n person(, \"W3C\", role = \"cph\", comment = \"slidy library\"),\n person(\"Dave\", \"Gandy\", role = c(\"ctb\", \"cph\"), comment = \"Font-Awesome\"),\n person(\"Ben\", \"Sperry\", role = \"ctb\", comment = \"Ionicons\"),\n person(, \"Drifty\", role = \"cph\", comment = \"Ionicons\"),\n person(\"Aidan\", \"Lister\", role = c(\"ctb\", \"cph\"), comment = \"jQuery StickyTabs\"),\n person(\"Benct Philip\", \"Jonsson\", role = c(\"ctb\", \"cph\"), comment = \"pagebreak Lua filter\"),\n person(\"Albert\", \"Krewinkel\", role = c(\"ctb\", \"cph\"), comment = \"pagebreak Lua filter\")\n )", + "Maintainer": "Yihui Xie ", + "Description": "Convert R Markdown documents into a variety of formats.", + "License": "GPL-3", + "URL": "https://github.com/rstudio/rmarkdown,\nhttps://pkgs.rstudio.com/rmarkdown/", + "BugReports": "https://github.com/rstudio/rmarkdown/issues", + "Depends": "R (>= 3.0)", + "Imports": "bslib (>= 0.2.5.1), evaluate (>= 0.13), htmltools (>= 0.3.5),\njquerylib, jsonlite, knitr (>= 1.22), methods, stringr (>=\n1.2.0), tinytex (>= 0.31), tools, utils, xfun (>= 0.30), yaml\n(>= 2.1.19)", + "Suggests": "digest, dygraphs, fs, rsconnect, downlit (>= 0.4.0), katex\n(>= 1.4.0), sass (>= 0.4.0), shiny (>= 1.6.0), testthat (>=\n3.0.3), tibble, tufte, vctrs, withr (>= 2.4.2)", + "VignetteBuilder": "knitr", + "Config/Needs/website": "rstudio/quillt, pkgdown", + "Encoding": "UTF-8", + "RoxygenNote": "7.1.2", + "SystemRequirements": "pandoc (>= 1.14) - http://pandoc.org", + "NeedsCompilation": "no", + "Packaged": "2022-04-25 18:22:36 UTC; yihui", + "Author": "JJ Allaire [aut],\n Yihui Xie [aut, cre] (),\n Jonathan McPherson [aut],\n Javier Luraschi [aut],\n Kevin Ushey [aut],\n Aron Atkins [aut],\n Hadley Wickham [aut],\n Joe Cheng [aut],\n Winston Chang [aut],\n Richard Iannone [aut] (),\n Andrew Dunning [ctb] (),\n Atsushi Yasumoto [ctb, cph] (,\n Number sections Lua filter),\n Barret Schloerke [ctb],\n Carson Sievert [ctb] (),\n Christophe Dervieux [ctb],\n Devon Ryan [ctb] (),\n Frederik Aust [ctb] (),\n Jeff Allen [ctb],\n JooYoung Seo [ctb] (),\n Malcolm Barrett [ctb],\n Rob Hyndman [ctb],\n Romain Lesur [ctb],\n Roy Storey [ctb],\n Ruben Arslan [ctb],\n Sergio Oller [ctb],\n RStudio, PBC [cph],\n jQuery UI contributors [ctb, cph] (jQuery UI library; authors listed in\n inst/rmd/h/jqueryui-AUTHORS.txt),\n Mark Otto [ctb] (Bootstrap library),\n Jacob Thornton [ctb] (Bootstrap library),\n Bootstrap contributors [ctb] (Bootstrap library),\n Twitter, Inc [cph] (Bootstrap library),\n Alexander Farkas [ctb, cph] (html5shiv library),\n Scott Jehl [ctb, cph] (Respond.js library),\n Ivan Sagalaev [ctb, cph] (highlight.js library),\n Greg Franko [ctb, cph] (tocify library),\n John MacFarlane [ctb, cph] (Pandoc templates),\n Google, Inc. [ctb, cph] (ioslides library),\n Dave Raggett [ctb] (slidy library),\n W3C [cph] (slidy library),\n Dave Gandy [ctb, cph] (Font-Awesome),\n Ben Sperry [ctb] (Ionicons),\n Drifty [cph] (Ionicons),\n Aidan Lister [ctb, cph] (jQuery StickyTabs),\n Benct Philip Jonsson [ctb, cph] (pagebreak Lua filter),\n Albert Krewinkel [ctb, cph] (pagebreak Lua filter)", + "Repository": "RSPM", + "Date/Publication": "2022-04-25 19:20:02 UTC", + "Built": "R 4.1.0; ; 2022-09-07 20:37:12 UTC; unix" + } + }, + "rootSolve": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "rootSolve", + "Version": "1.8.2.3", + "Title": "Nonlinear Root Finding, Equilibrium and Steady-State Analysis of\nOrdinary Differential Equations", + "Authors@R": "c(person(\"Karline\",\"Soetaert\", role = c(\"aut\", \"cre\"), \n email = \"karline.soetaert@nioz.nl\"),\n person(\"Alan C.\",\"Hindmarsh\", role = \"ctb\", \n comment = \"files lsodes.f, sparse.f\"),\n person(\"S.C.\",\"Eisenstat\", role = \"ctb\", \n comment = \"file sparse.f\"),\n person(\"Cleve\",\"Moler\", role = \"ctb\", \n comment = \"file dlinpk.f\"),\n person(\"Jack\",\"Dongarra\", role = \"ctb\", \n comment = \"file dlinpk.f\"),\n person(\"Youcef\", \"Saad\", role = \"ctb\", \n comment = \"file dsparsk.f\"))", + "Maintainer": "Karline Soetaert ", + "Author": "Karline Soetaert [aut, cre],\n Alan C. Hindmarsh [ctb] (files lsodes.f, sparse.f),\n S.C. Eisenstat [ctb] (file sparse.f),\n Cleve Moler [ctb] (file dlinpk.f),\n Jack Dongarra [ctb] (file dlinpk.f),\n Youcef Saad [ctb] (file dsparsk.f)", + "Depends": "R (>= 2.01)", + "Imports": "stats, graphics, grDevices", + "Description": "Routines to find the root of nonlinear functions, and to perform steady-state and equilibrium analysis of ordinary differential equations (ODE). \n Includes routines that: (1) generate gradient and jacobian matrices (full and banded),\n (2) find roots of non-linear equations by the 'Newton-Raphson' method, \n (3) estimate steady-state conditions of a system of (differential) equations in full, banded or sparse form, using the 'Newton-Raphson' method, or by dynamically running,\n (4) solve the steady-state conditions for uni-and multicomponent 1-D, 2-D, and 3-D partial differential equations, that have been converted to ordinary differential equations\n by numerical differencing (using the method-of-lines approach).\n Includes fortran code.", + "License": "GPL (>= 2)", + "NeedsCompilation": "yes", + "Packaged": "2021-09-23 05:51:17 UTC; karlines", + "Repository": "RSPM", + "Date/Publication": "2021-09-29 12:30:02 UTC", + "Encoding": "UTF-8", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-11-05 08:07:38 UTC; unix" + } + }, + "rpart": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "rpart", + "Priority": "recommended", + "Version": "4.1.19", + "Date": "2022-10-21", + "Authors@R": "c(person(\"Terry\", \"Therneau\", role = \"aut\",\n\t email = \"therneau@mayo.edu\"),\n person(\"Beth\", \"Atkinson\", role = c(\"aut\", \"cre\"),\n\t email = \"atkinson@mayo.edu\"),\n person(\"Brian\", \"Ripley\", role = \"trl\",\n email = \"ripley@stats.ox.ac.uk\",\n\t\t comment = \"producer of the initial R port, maintainer 1999-2017\"))", + "Description": "Recursive partitioning for classification, \n regression and survival trees. An implementation of most of the \n functionality of the 1984 book by Breiman, Friedman, Olshen and Stone.", + "Title": "Recursive Partitioning and Regression Trees", + "Depends": "R (>= 2.15.0), graphics, stats, grDevices", + "Suggests": "survival", + "License": "GPL-2 | GPL-3", + "LazyData": "yes", + "ByteCompile": "yes", + "NeedsCompilation": "yes", + "Author": "Terry Therneau [aut],\n Beth Atkinson [aut, cre],\n Brian Ripley [trl] (producer of the initial R port, maintainer\n 1999-2017)", + "Maintainer": "Beth Atkinson ", + "Repository": "CRAN", + "URL": "https://github.com/bethatkinson/rpart,\nhttps://cran.r-project.org/package=rpart", + "BugReports": "https://github.com/bethatkinson/rpart/issues", + "Packaged": "2022-10-21 17:17:04 UTC; atkinson", + "Date/Publication": "2022-10-21 18:42:41 UTC", + "Built": "R 4.2.3; x86_64-pc-linux-gnu; 2023-10-03 23:19:10 UTC; unix" + } + }, + "rprojroot": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "rprojroot", + "Title": "Finding Files in Project Subdirectories", + "Version": "2.0.2", + "Authors@R": "\n person(given = \"Kirill\",\n family = \"M\\u00fcller\",\n role = c(\"aut\", \"cre\"),\n email = \"krlmlr+r@mailbox.org\",\n comment = c(ORCID = \"0000-0002-1416-3412\"))", + "Description": "Robust, reliable and flexible paths to files below\n a project root. The 'root' of a project is defined as a directory that\n matches a certain criterion, e.g., it contains a certain regular file.", + "License": "MIT + file LICENSE", + "URL": "https://rprojroot.r-lib.org/, https://github.com/r-lib/rprojroot", + "BugReports": "https://github.com/r-lib/rprojroot/issues", + "Depends": "R (>= 3.0.0)", + "Suggests": "covr, knitr, lifecycle, mockr, rmarkdown, testthat (>=\n3.0.0), withr", + "VignetteBuilder": "knitr", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "LazyData": "true", + "RoxygenNote": "7.1.1.9000", + "NeedsCompilation": "no", + "Packaged": "2020-11-15 13:03:34 UTC; kirill", + "Author": "Kirill Müller [aut, cre] ()", + "Maintainer": "Kirill Müller ", + "Repository": "CRAN", + "Date/Publication": "2020-11-15 13:30:03 UTC", + "Built": "R 4.1.0; ; 2022-10-17 16:58:10 UTC; unix" + } + }, + "rstudioapi": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "rstudioapi", + "Title": "Safely Access the RStudio API", + "Description": "Access the RStudio API (if available) and provide informative error\n messages when it's not.", + "Version": "0.13", + "Authors@R": "c(\n person(\"Kevin\", \"Ushey\", role = c(\"aut\", \"cre\"), email = \"kevin@rstudio.com\"),\n person(\"JJ\", \"Allaire\", role = c(\"aut\"), email = \"jj@rstudio.com\"),\n person(\"Hadley\", \"Wickham\", role = c(\"aut\"), email = \"hadley@rstudio.com\"),\n person(\"Gary\", \"Ritchie\", role = c(\"aut\"), email = \"gary@rstudio.com\"),\n person(family = \"RStudio\", role = \"cph\")\n )", + "Maintainer": "Kevin Ushey ", + "License": "MIT + file LICENSE", + "URL": "https://github.com/rstudio/rstudioapi", + "BugReports": "https://github.com/rstudio/rstudioapi/issues", + "RoxygenNote": "7.1.1", + "Suggests": "testthat, knitr, rmarkdown, clipr", + "VignetteBuilder": "knitr", + "Encoding": "UTF-8", + "NeedsCompilation": "no", + "Packaged": "2020-11-11 23:34:30 UTC; kevinushey", + "Author": "Kevin Ushey [aut, cre],\n JJ Allaire [aut],\n Hadley Wickham [aut],\n Gary Ritchie [aut],\n RStudio [cph]", + "Repository": "CRAN", + "Date/Publication": "2020-11-12 21:50:02 UTC", + "Built": "R 4.1.0; ; 2022-09-02 16:48:10 UTC; unix" + } + }, + "sass": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Type": "Package", + "Package": "sass", + "Version": "0.4.0", + "Title": "Syntactically Awesome Style Sheets ('Sass')", + "Description": "An 'SCSS' compiler, powered by the 'LibSass' library. With this,\n R developers can use variables, inheritance, and functions to generate\n dynamic style sheets. The package uses the 'Sass CSS' extension language,\n which is stable, powerful, and CSS compatible.", + "Authors@R": "c(\n person(\"Joe\", \"Cheng\", , \"joe@rstudio.com\", \"aut\"),\n person(\"Timothy\", \"Mastny\", , \"tim.mastny@gmail.com\", \"aut\"),\n person(\"Richard\", \"Iannone\", , \"rich@rstudio.com\", \"aut\",\n comment = c(ORCID = \"0000-0003-3925-190X\")),\n person(\"Barret\", \"Schloerke\", , \"barret@rstudio.com\", \"aut\",\n comment = c(ORCID = \"0000-0001-9986-114X\")),\n person(\"Carson\", \"Sievert\", , \"carson@rstudio.com\", c(\"aut\", \"cre\"),\n comment = c(ORCID = \"0000-0002-4958-2844\")),\n person(\"Christophe\", \"Dervieux\", , \"cderv@rstudio.com\", c(\"ctb\"),\n comment = c(ORCID = \"0000-0003-4474-2498\")),\n person(family = \"RStudio\", role = c(\"cph\", \"fnd\")),\n person(family = \"Sass Open Source Foundation\", role = c(\"ctb\", \"cph\"),\n comment = \"LibSass library\"),\n person(\"Greter\", \"Marcel\", role = c(\"ctb\", \"cph\"),\n comment = \"LibSass library\"),\n person(\"Mifsud\", \"Michael\", role = c(\"ctb\", \"cph\"),\n comment = \"LibSass library\"),\n person(\"Hampton\", \"Catlin\", role = c(\"ctb\", \"cph\"),\n comment = \"LibSass library\"),\n person(\"Natalie\", \"Weizenbaum\", role = c(\"ctb\", \"cph\"),\n comment = \"LibSass library\"),\n person(\"Chris\", \"Eppstein\", role = c(\"ctb\", \"cph\"),\n comment = \"LibSass library\"),\n person(\"Adams\", \"Joseph\", role = c(\"ctb\", \"cph\"),\n comment = \"json.cpp\"),\n person(\"Trifunovic\", \"Nemanja\", role = c(\"ctb\", \"cph\"),\n comment = \"utf8.h\")\n )", + "License": "MIT + file LICENSE", + "URL": "https://github.com/rstudio/sass", + "BugReports": "https://github.com/rstudio/sass/issues", + "Encoding": "UTF-8", + "RoxygenNote": "7.1.1", + "SystemRequirements": "GNU make", + "Imports": "fs, rlang (>= 0.4.10), htmltools (>= 0.5.1), R6, rappdirs", + "Suggests": "testthat, knitr, rmarkdown, withr, shiny, curl", + "VignetteBuilder": "knitr", + "Config/testthat/edition": "3", + "NeedsCompilation": "yes", + "Packaged": "2021-05-11 13:52:17 UTC; cpsievert", + "Author": "Joe Cheng [aut],\n Timothy Mastny [aut],\n Richard Iannone [aut] (),\n Barret Schloerke [aut] (),\n Carson Sievert [aut, cre] (),\n Christophe Dervieux [ctb] (),\n RStudio [cph, fnd],\n Sass Open Source Foundation [ctb, cph] (LibSass library),\n Greter Marcel [ctb, cph] (LibSass library),\n Mifsud Michael [ctb, cph] (LibSass library),\n Hampton Catlin [ctb, cph] (LibSass library),\n Natalie Weizenbaum [ctb, cph] (LibSass library),\n Chris Eppstein [ctb, cph] (LibSass library),\n Adams Joseph [ctb, cph] (json.cpp),\n Trifunovic Nemanja [ctb, cph] (utf8.h)", + "Maintainer": "Carson Sievert ", + "Repository": "CRAN", + "Date/Publication": "2021-05-12 06:00:02 UTC", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-09-02 16:41:48 UTC; unix" + } + }, + "scales": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "scales", + "Title": "Scale Functions for Visualization", + "Version": "1.3.0", + "Authors@R": "c(\n person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\")),\n person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"cre\", \"aut\"),\n comment = c(ORCID = \"0000-0002-5147-4711\")),\n person(\"Dana\", \"Seidel\", role = \"aut\"),\n person(\"Posit, PBC\", role = c(\"cph\", \"fnd\"))\n )", + "Description": "Graphical scales map data to aesthetics, and provide methods\n for automatically determining breaks and labels for axes and legends.", + "License": "MIT + file LICENSE", + "URL": "https://scales.r-lib.org, https://github.com/r-lib/scales", + "BugReports": "https://github.com/r-lib/scales/issues", + "Depends": "R (>= 3.6)", + "Imports": "cli, farver (>= 2.0.3), glue, labeling, lifecycle, munsell (>=\n0.5), R6, RColorBrewer, rlang (>= 1.0.0), viridisLite", + "Suggests": "bit64, covr, dichromat, ggplot2, hms (>= 0.5.0), stringi,\ntestthat (>= 3.0.0)", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "LazyLoad": "yes", + "RoxygenNote": "7.2.3", + "NeedsCompilation": "yes", + "Packaged": "2023-11-27 20:27:59 UTC; thomas", + "Author": "Hadley Wickham [aut],\n Thomas Lin Pedersen [cre, aut]\n (),\n Dana Seidel [aut],\n Posit, PBC [cph, fnd]", + "Maintainer": "Thomas Lin Pedersen ", + "Repository": "CRAN", + "Date/Publication": "2023-11-28 09:10:06 UTC", + "Built": "R 4.2.3; ; 2024-01-11 15:12:49 UTC; unix" + } + }, + "sendigR": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "sendigR", + "Title": "Enable Cross-Study Analysis of 'CDISC' 'SEND' Datasets", + "Version": "1.0.0", + "Authors@R": "\n c(\n person(\"Bo\", \"Larsen\", email = \"bolr@novonordisk.com\", role = \"aut\"),\n person(\"Yousuf\", \"Ali\", email = \"md.ali@fda.hhs.gov\", role = \"aut\"),\n person(\"Kevin\", \"Snyder\", email = \"kevin.snyder@fda.hhs.gov\", role = \"aut\"),\n person(\"William\", \"Houser\", email = \"william.houser@bms.com\", role = \"aut\"),\n person(\"Brianna\", \"Paisley\", email = \"paisley_brianna_meadow@lilly.com\", role = \"aut\"),\n person(\"Cmsabbir\", \"Ahmed\", email = \"cmsabbir.ahmed@fda.hhs.gov\", role = \"aut\"),\n person(\"Susan\", \"Butler\", email = \"susan.butler@fda.hhs.gov\", role = \"aut\"),\n person(\"Michael\", \"Rosentreter\", email = \"michael.rosentreter@bayer.com\", role = \"aut\"),\n person(\"Michael\", \"Denieu\", email = \"michael.denieu@labcorp.com\", role = \"aut\"),\n person(\"Wenxian\", \"Wang\", email = \"wenxian.wang@bms.com\", role = c(\"cre\", \"aut\")),\n\tperson(given = \"BioCelerate\", role = \"cph\"))", + "Description": "A system enables cross study Analysis by extracting and filtering study data for \n control animals from 'CDISC' 'SEND' Study Repository. \n These data types are supported: Body Weights, Laboratory test results and Microscopic findings. \n These database types are supported: 'SQLite' and 'Oracle'.", + "License": "MIT + file LICENSE", + "URL": "https://github.com/phuse-org/sendigR", + "BugReports": "https://github.com/phuse-org/sendigR/issues", + "Encoding": "UTF-8", + "Roxygen": "list(markdown = TRUE)", + "RoxygenNote": "7.1.2", + "Imports": "DBI, RPostgres, RSQLite, data.table, readxl, magrittr, xfun,\nstringr, DescTools, parsedate, shiny, shinydashboard,\nhtmltools, DT, dplyr, ggplot2, Hmisc, haven, plotly, cicerone,\nreticulate, sjlabelled", + "Suggests": "knitr, rmarkdown, logr, shinycssloaders, testthat", + "VignetteBuilder": "knitr", + "Config/testthat/edition": "3", + "Depends": "R (>= 4.1.0)", + "SystemRequirements": "Python(>=3.9.6)", + "NeedsCompilation": "no", + "Packaged": "2023-07-28 13:56:11 UTC; Md.Ali@fda.hhs.gov", + "Author": "Bo Larsen [aut],\n Yousuf Ali [aut],\n Kevin Snyder [aut],\n William Houser [aut],\n Brianna Paisley [aut],\n Cmsabbir Ahmed [aut],\n Susan Butler [aut],\n Michael Rosentreter [aut],\n Michael Denieu [aut],\n Wenxian Wang [cre, aut],\n BioCelerate [cph]", + "Maintainer": "Wenxian Wang ", + "Built": "R 4.2.3; ; 2023-08-11 11:28:45 UTC; unix" + } + }, + "shiny": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "shiny", + "Type": "Package", + "Title": "Web Application Framework for R", + "Version": "1.8.1.1", + "Authors@R": "c(\n person(\"Winston\", \"Chang\", role = c(\"aut\", \"cre\"), email = \"winston@posit.co\", comment = c(ORCID = \"0000-0002-1576-2126\")),\n person(\"Joe\", \"Cheng\", role = \"aut\", email = \"joe@posit.co\"),\n person(\"JJ\", \"Allaire\", role = \"aut\", email = \"jj@posit.co\"),\n person(\"Carson\", \"Sievert\", role = \"aut\", email = \"carson@posit.co\", comment = c(ORCID = \"0000-0002-4958-2844\")),\n person(\"Barret\", \"Schloerke\", role = \"aut\", email = \"barret@posit.co\", comment = c(ORCID = \"0000-0001-9986-114X\")),\n person(\"Yihui\", \"Xie\", role = \"aut\", email = \"yihui@posit.co\"),\n person(\"Jeff\", \"Allen\", role = \"aut\"),\n person(\"Jonathan\", \"McPherson\", role = \"aut\", email = \"jonathan@posit.co\"),\n person(\"Alan\", \"Dipert\", role = \"aut\"),\n person(\"Barbara\", \"Borges\", role = \"aut\"),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")),\n person(family = \"jQuery Foundation\", role = \"cph\",\n comment = \"jQuery library and jQuery UI library\"),\n person(family = \"jQuery contributors\", role = c(\"ctb\", \"cph\"),\n comment = \"jQuery library; authors listed in inst/www/shared/jquery-AUTHORS.txt\"),\n person(family = \"jQuery UI contributors\", role = c(\"ctb\", \"cph\"),\n comment = \"jQuery UI library; authors listed in inst/www/shared/jqueryui/AUTHORS.txt\"),\n person(\"Mark\", \"Otto\", role = \"ctb\",\n comment = \"Bootstrap library\"),\n person(\"Jacob\", \"Thornton\", role = \"ctb\",\n comment = \"Bootstrap library\"),\n person(family = \"Bootstrap contributors\", role = \"ctb\",\n comment = \"Bootstrap library\"),\n person(family = \"Twitter, Inc\", role = \"cph\",\n comment = \"Bootstrap library\"),\n person(\"Prem Nawaz\", \"Khan\", role = \"ctb\",\n comment = \"Bootstrap accessibility plugin\"),\n person(\"Victor\", \"Tsaran\", role = \"ctb\",\n comment = \"Bootstrap accessibility plugin\"),\n person(\"Dennis\", \"Lembree\", role = \"ctb\",\n comment = \"Bootstrap accessibility plugin\"),\n person(\"Srinivasu\", \"Chakravarthula\", role = \"ctb\",\n comment = \"Bootstrap accessibility plugin\"),\n person(\"Cathy\", \"O'Connor\", role = \"ctb\",\n comment = \"Bootstrap accessibility plugin\"),\n person(family = \"PayPal, Inc\", role = \"cph\",\n comment = \"Bootstrap accessibility plugin\"),\n person(\"Stefan\", \"Petre\", role = c(\"ctb\", \"cph\"),\n comment = \"Bootstrap-datepicker library\"),\n person(\"Andrew\", \"Rowls\", role = c(\"ctb\", \"cph\"),\n comment = \"Bootstrap-datepicker library\"),\n person(\"Brian\", \"Reavis\", role = c(\"ctb\", \"cph\"),\n comment = \"selectize.js library\"),\n person(\"Salmen\", \"Bejaoui\", role = c(\"ctb\", \"cph\"),\n comment = \"selectize-plugin-a11y library\"),\n person(\"Denis\", \"Ineshin\", role = c(\"ctb\", \"cph\"),\n comment = \"ion.rangeSlider library\"),\n person(\"Sami\", \"Samhuri\", role = c(\"ctb\", \"cph\"),\n comment = \"Javascript strftime library\"),\n person(family = \"SpryMedia Limited\", role = c(\"ctb\", \"cph\"),\n comment = \"DataTables library\"),\n person(\"John\", \"Fraser\", role = c(\"ctb\", \"cph\"),\n comment = \"showdown.js library\"),\n person(\"John\", \"Gruber\", role = c(\"ctb\", \"cph\"),\n comment = \"showdown.js library\"),\n person(\"Ivan\", \"Sagalaev\", role = c(\"ctb\", \"cph\"),\n comment = \"highlight.js library\"),\n person(family = \"R Core Team\", role = c(\"ctb\", \"cph\"),\n comment = \"tar implementation from R\")\n )", + "Description": "Makes it incredibly easy to build interactive web\n applications with R. Automatic \"reactive\" binding between inputs and\n outputs and extensive prebuilt widgets make it possible to build\n beautiful, responsive, and powerful applications with minimal effort.", + "License": "GPL-3 | file LICENSE", + "Depends": "R (>= 3.0.2), methods", + "Imports": "utils, grDevices, httpuv (>= 1.5.2), mime (>= 0.3), jsonlite\n(>= 0.9.16), xtable, fontawesome (>= 0.4.0), htmltools (>=\n0.5.4), R6 (>= 2.0), sourcetools, later (>= 1.0.0), promises\n(>= 1.1.0), tools, crayon, rlang (>= 0.4.10), fastmap (>=\n1.1.1), withr, commonmark (>= 1.7), glue (>= 1.3.2), bslib (>=\n0.3.0), cachem, lifecycle (>= 0.2.0)", + "Suggests": "datasets, DT, Cairo (>= 1.5-5), testthat (>= 3.0.0), knitr\n(>= 1.6), markdown, rmarkdown, ggplot2, reactlog (>= 1.0.0),\nmagrittr, yaml, future, dygraphs, ragg, showtext, sass", + "URL": "https://shiny.posit.co/, https://github.com/rstudio/shiny", + "BugReports": "https://github.com/rstudio/shiny/issues", + "Collate": "'globals.R' 'app-state.R' 'app_template.R' 'bind-cache.R'\n'bind-event.R' 'bookmark-state-local.R' 'bookmark-state.R'\n'bootstrap-deprecated.R' 'bootstrap-layout.R' 'conditions.R'\n'map.R' 'utils.R' 'bootstrap.R' 'cache-utils.R' 'deprecated.R'\n'devmode.R' 'diagnose.R' 'extended-task.R' 'fileupload.R'\n'graph.R' 'reactives.R' 'reactive-domains.R' 'history.R'\n'hooks.R' 'html-deps.R' 'image-interact-opts.R'\n'image-interact.R' 'imageutils.R' 'input-action.R'\n'input-checkbox.R' 'input-checkboxgroup.R' 'input-date.R'\n'input-daterange.R' 'input-file.R' 'input-numeric.R'\n'input-password.R' 'input-radiobuttons.R' 'input-select.R'\n'input-slider.R' 'input-submit.R' 'input-text.R'\n'input-textarea.R' 'input-utils.R' 'insert-tab.R' 'insert-ui.R'\n'jqueryui.R' 'knitr.R' 'middleware-shiny.R' 'middleware.R'\n'timer.R' 'shiny.R' 'mock-session.R' 'modal.R' 'modules.R'\n'notifications.R' 'priorityqueue.R' 'progress.R' 'react.R'\n'reexports.R' 'render-cached-plot.R' 'render-plot.R'\n'render-table.R' 'run-url.R' 'runapp.R' 'serializers.R'\n'server-input-handlers.R' 'server-resource-paths.R' 'server.R'\n'shiny-options.R' 'shiny-package.R' 'shinyapp.R' 'shinyui.R'\n'shinywrappers.R' 'showcase.R' 'snapshot.R' 'staticimports.R'\n'tar.R' 'test-export.R' 'test-server.R' 'test.R'\n'update-input.R' 'utils-lang.R' 'version_bs_date_picker.R'\n'version_ion_range_slider.R' 'version_jquery.R'\n'version_jqueryui.R' 'version_selectize.R' 'version_strftime.R'\n'viewer.R'", + "RoxygenNote": "7.3.1", + "Encoding": "UTF-8", + "RdMacros": "lifecycle", + "Config/testthat/edition": "3", + "Config/Needs/check": "shinytest2", + "NeedsCompilation": "no", + "Packaged": "2024-04-02 14:16:09 UTC; cpsievert", + "Author": "Winston Chang [aut, cre] (),\n Joe Cheng [aut],\n JJ Allaire [aut],\n Carson Sievert [aut] (),\n Barret Schloerke [aut] (),\n Yihui Xie [aut],\n Jeff Allen [aut],\n Jonathan McPherson [aut],\n Alan Dipert [aut],\n Barbara Borges [aut],\n Posit Software, PBC [cph, fnd],\n jQuery Foundation [cph] (jQuery library and jQuery UI library),\n jQuery contributors [ctb, cph] (jQuery library; authors listed in\n inst/www/shared/jquery-AUTHORS.txt),\n jQuery UI contributors [ctb, cph] (jQuery UI library; authors listed in\n inst/www/shared/jqueryui/AUTHORS.txt),\n Mark Otto [ctb] (Bootstrap library),\n Jacob Thornton [ctb] (Bootstrap library),\n Bootstrap contributors [ctb] (Bootstrap library),\n Twitter, Inc [cph] (Bootstrap library),\n Prem Nawaz Khan [ctb] (Bootstrap accessibility plugin),\n Victor Tsaran [ctb] (Bootstrap accessibility plugin),\n Dennis Lembree [ctb] (Bootstrap accessibility plugin),\n Srinivasu Chakravarthula [ctb] (Bootstrap accessibility plugin),\n Cathy O'Connor [ctb] (Bootstrap accessibility plugin),\n PayPal, Inc [cph] (Bootstrap accessibility plugin),\n Stefan Petre [ctb, cph] (Bootstrap-datepicker library),\n Andrew Rowls [ctb, cph] (Bootstrap-datepicker library),\n Brian Reavis [ctb, cph] (selectize.js library),\n Salmen Bejaoui [ctb, cph] (selectize-plugin-a11y library),\n Denis Ineshin [ctb, cph] (ion.rangeSlider library),\n Sami Samhuri [ctb, cph] (Javascript strftime library),\n SpryMedia Limited [ctb, cph] (DataTables library),\n John Fraser [ctb, cph] (showdown.js library),\n John Gruber [ctb, cph] (showdown.js library),\n Ivan Sagalaev [ctb, cph] (highlight.js library),\n R Core Team [ctb, cph] (tar implementation from R)", + "Maintainer": "Winston Chang ", + "Repository": "CRAN", + "Date/Publication": "2024-04-02 17:22:03 UTC", + "Built": "R 4.2.3; ; 2024-04-12 14:41:33 UTC; unix" + } + }, + "shinyFiles": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "shinyFiles", + "Type": "Package", + "Title": "A Server-Side File System Viewer for Shiny", + "Version": "0.9.3", + "Authors@R": "\n c(person(given = \"Thomas Lin\",\n family = \"Pedersen\",\n role = c(\"cre\", \"aut\"),\n email = \"thomasp85@gmail.com\",\n comment = c(ORCID = \"0000-0002-5147-4711\")),\n person(given = \"Vincent\",\n family = \"Nijs\",\n role = \"aut\"),\n person(given = \"Thomas\",\n family = \"Schaffner\",\n role = \"aut\"),\n person(given = \"Eric\",\n family = \"Nantz\",\n role = \"aut\"))", + "Maintainer": "Thomas Lin Pedersen ", + "Description": "Provides functionality for client-side navigation of\n the server side file system in shiny apps. In case the app is running\n locally this gives the user direct access to the file system without the\n need to \"download\" files to a temporary location. Both file and folder\n selection as well as file saving is available.", + "License": "GPL (>= 2)", + "Encoding": "UTF-8", + "Imports": "htmltools, jsonlite, tools, shiny (>= 1.1.0), fs (>= 1.2.6),\ntibble (>= 1.4.2)", + "Collate": "'aaa.R' 'filechoose.R' 'dirchoose.R' 'filesave.R'\n'shinyFiles-package.R'", + "RoxygenNote": "7.2.1", + "URL": "https://github.com/thomasp85/shinyFiles", + "BugReports": "https://github.com/thomasp85/shinyFiles/issues", + "Suggests": "covr", + "NeedsCompilation": "no", + "Packaged": "2022-08-19 13:37:35 UTC; thomas", + "Author": "Thomas Lin Pedersen [cre, aut]\n (),\n Vincent Nijs [aut],\n Thomas Schaffner [aut],\n Eric Nantz [aut]", + "Repository": "RSPM", + "Date/Publication": "2022-08-19 14:00:02 UTC", + "Built": "R 4.1.0; ; 2022-11-07 13:38:17 UTC; unix" + } + }, + "shinyTree": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "shinyTree", + "Type": "Package", + "Title": "jsTree Bindings for Shiny", + "Version": "0.3.1", + "Date": "2023-7-21", + "Authors@R": "c(\n person(family=\"Trestle Technology, LLC\", role=\"aut\", email=\"cran@trestletechnology.net\"),\n person(\"Jeff\", \"Allen\", role=\"aut\", email=\"cran@trestletechnology.net\"),\n person(family=\"Institut de Radioprotection et de Sûreté Nucléaire\", role=c(\"cph\"), email = \"yann.richet@irsn.fr\"),\n person(\"Ivan\", \"Bozhanov\", role=c(\"ctb\", \"cph\"), comment = \"jsTree\"),\n person(family=\"The Dojo Foundation\", role=c(\"ctb\", \"cph\"), comment=\"require.js\"),\n person(family=\"jQuery Foundation, Inc.\", role=c(\"ctb\", \"cph\")),\n person(\"Mike\", \"Schaffer\", role=c(\"ctb\"), email=\"mschaff@gmail.com\"),\n person(\"Timm\", \"Danker\", role=c(\"ctb\"), email=\"tidafr@carina.uberspace.de\"),\n person(\"Michael\", \"Bell\", role=c(\"cre\"), email=\"bell_michael_a@lilly.com\"),\n person(\"Sebastian\", \"Gatscha\", role=c(\"ctb\"), email=\"kona1@gmx.at\"),\n person(\"Thorn\", \"Thaler\", role = c(\"ctb\"), email = \"thorn.thaler@thothal.at\"))", + "Maintainer": "Michael Bell ", + "Description": "Exposes bindings to jsTree -- a JavaScript library\n that supports interactive trees -- to enable a rich, editable trees in\n Shiny.", + "License": "MIT + file LICENSE", + "Depends": "R (>= 2.15.1), methods", + "Imports": "shiny (>= 0.9.0), htmlwidgets, jsonlite, stringr, promises", + "Suggests": "testthat, shinytest, data.tree", + "BugReports": "https://github.com/shinyTree/shinyTree/issues", + "RoxygenNote": "7.2.3", + "Encoding": "UTF-8", + "NeedsCompilation": "no", + "Packaged": "2023-08-07 16:36:45 UTC; c038195", + "Author": "Trestle Technology, LLC [aut],\n Jeff Allen [aut],\n Institut de Radioprotection et de Sûreté Nucléaire [cph],\n Ivan Bozhanov [ctb, cph] (jsTree),\n The Dojo Foundation [ctb, cph] (require.js),\n jQuery Foundation, Inc. [ctb, cph],\n Mike Schaffer [ctb],\n Timm Danker [ctb],\n Michael Bell [cre],\n Sebastian Gatscha [ctb],\n Thorn Thaler [ctb]", + "Repository": "CRAN", + "Date/Publication": "2023-08-07 18:30:02 UTC", + "Built": "R 4.2.3; ; 2024-08-20 14:07:48 UTC; unix" + } + }, + "shinyWidgets": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "shinyWidgets", + "Title": "Custom Inputs Widgets for Shiny", + "Version": "0.8.6", + "Authors@R": "c(\n person(\"Victor\", \"Perrier\", email = \"victor.perrier@dreamrs.fr\", role = c(\"aut\", \"cre\", \"cph\")),\n person(\"Fanny\", \"Meyer\", role = \"aut\"),\n person(\"David\", \"Granjon\", role = \"aut\"),\n person(\"Ian\", \"Fellows\", role = \"ctb\", comment = \"Methods for mutating vertical tabs & updateMultiInput\"),\n person(\"Wil\", \"Davis\", role = \"ctb\", comment = \"numericRangeInput function\"),\n person(\"Spencer\", \"Matthews\", role = \"ctb\", comment = \"autoNumeric methods\"),\n person(family = \"JavaScript and CSS libraries authors\", role = c(\"ctb\", \"cph\"), comment = \"All authors are listed in LICENSE.md\")\n )", + "Description": "Collection of custom input controls and user interface components for 'Shiny' applications. \n Give your applications a unique and colorful style !", + "URL": "https://github.com/dreamRs/shinyWidgets,\nhttps://dreamrs.github.io/shinyWidgets/", + "BugReports": "https://github.com/dreamRs/shinyWidgets/issues", + "License": "GPL-3", + "Encoding": "UTF-8", + "LazyData": "true", + "RoxygenNote": "7.3.1", + "Depends": "R (>= 3.1.0)", + "Imports": "anytime, bslib, sass, shiny (>= 1.6.0), htmltools (>= 0.5.1),\njsonlite, grDevices, rlang", + "Suggests": "testthat, covr, ggplot2, DT, scales, shinydashboard,\nshinydashboardPlus", + "NeedsCompilation": "no", + "Packaged": "2024-04-24 16:07:11 UTC; victorp", + "Author": "Victor Perrier [aut, cre, cph],\n Fanny Meyer [aut],\n David Granjon [aut],\n Ian Fellows [ctb] (Methods for mutating vertical tabs &\n updateMultiInput),\n Wil Davis [ctb] (numericRangeInput function),\n Spencer Matthews [ctb] (autoNumeric methods),\n JavaScript and CSS libraries authors [ctb, cph] (All authors are listed\n in LICENSE.md)", + "Maintainer": "Victor Perrier ", + "Repository": "CRAN", + "Date/Publication": "2024-04-24 17:00:02 UTC", + "Built": "R 4.2.3; ; 2024-08-20 14:08:37 UTC; unix" + } + }, + "shinydashboard": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "shinydashboard", + "Title": "Create Dashboards with 'Shiny'", + "Version": "0.7.2", + "Authors@R": "c(\n person(\"Winston\", \"Chang\", role = c(\"aut\", \"cre\"), email = \"winston@rstudio.com\"),\n person(\"Barbara\", \"Borges Ribeiro\", role = \"aut\", email = \"barbara@rstudio.com\"),\n person(family = \"RStudio\", role = \"cph\"),\n person(family = \"Almasaeed Studio\", role = c(\"ctb\", \"cph\"), comment = \"AdminLTE theme for Bootstrap\"),\n person(family = \"Adobe Systems Incorporated\", role = c(\"ctb\", \"cph\"), comment = \"Source Sans Pro font\")\n )", + "Description": "Create dashboards with 'Shiny'. This package provides\n a theme on top of 'Shiny', making it easy to create attractive dashboards.", + "URL": "http://rstudio.github.io/shinydashboard/", + "Depends": "R (>= 3.0)", + "License": "GPL (>= 2) | file LICENSE", + "Imports": "utils, shiny (>= 1.0.0), htmltools (>= 0.2.6), promises", + "BugReports": "https://github.com/rstudio/shinydashboard", + "RoxygenNote": "6.0.1.9000", + "NeedsCompilation": "no", + "Packaged": "2021-09-29 17:40:23 UTC; winston", + "Author": "Winston Chang [aut, cre],\n Barbara Borges Ribeiro [aut],\n RStudio [cph],\n Almasaeed Studio [ctb, cph] (AdminLTE theme for Bootstrap),\n Adobe Systems Incorporated [ctb, cph] (Source Sans Pro font)", + "Maintainer": "Winston Chang ", + "Repository": "CRAN", + "Date/Publication": "2021-09-30 12:10:06 UTC", + "Built": "R 4.1.0; ; 2022-09-07 20:49:41 UTC; unix" + } + }, + "sjlabelled": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "sjlabelled", + "Type": "Package", + "Encoding": "UTF-8", + "Title": "Labelled Data Utility Functions", + "Version": "1.2.0", + "Authors@R": "c(\n person(\"Daniel\", \"Lüdecke\", role = c(\"aut\", \"cre\"), email = \"d.luedecke@uke.de\", comment = c(ORCID = \"0000-0002-8895-3206\")),\n person(\"avid\", \"Ranzolin\", role = \"ctb\", email = \"daranzolin@gmail.com\"),\n person(\"Jonathan\", \"De Troye\", role = \"ctb\", email = \"detroyejr@outlook.com\")\n )", + "Maintainer": "Daniel Lüdecke ", + "Description": "Collection of functions dealing with labelled data, like reading and \n writing data between R and other statistical software packages like 'SPSS',\n 'SAS' or 'Stata', and working with labelled data. This includes easy ways \n to get, set or change value and variable label attributes, to convert \n labelled vectors into factors or numeric (and vice versa), or to deal with \n multiple declared missing values.", + "License": "GPL-3", + "Depends": "R (>= 3.4)", + "Imports": "insight, datawizard, stats, tools, utils", + "Suggests": "dplyr, haven (>= 1.1.2), magrittr, sjmisc, sjPlot, knitr,\nrlang, rmarkdown, snakecase, testthat", + "URL": "https://strengejacke.github.io/sjlabelled/", + "BugReports": "https://github.com/strengejacke/sjlabelled/issues", + "RoxygenNote": "7.1.2", + "VignetteBuilder": "knitr", + "NeedsCompilation": "no", + "Packaged": "2022-04-10 09:09:11 UTC; DL", + "Author": "Daniel Lüdecke [aut, cre] (),\n avid Ranzolin [ctb],\n Jonathan De Troye [ctb]", + "Repository": "RSPM", + "Date/Publication": "2022-04-10 09:30:02 UTC", + "Built": "R 4.1.0; ; 2022-11-05 08:17:25 UTC; unix" + } + }, + "sourcetools": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "sourcetools", + "Type": "Package", + "Title": "Tools for Reading, Tokenizing and Parsing R Code", + "Version": "0.1.7", + "Author": "Kevin Ushey", + "Maintainer": "Kevin Ushey ", + "Description": "Tools for the reading and tokenization of R code. The\n 'sourcetools' package provides both an R and C++ interface for the tokenization\n of R code, and helpers for interacting with the tokenized representation of R\n code.", + "License": "MIT + file LICENSE", + "LazyData": "TRUE", + "Depends": "R (>= 3.0.2)", + "Suggests": "testthat", + "RoxygenNote": "5.0.1", + "BugReports": "https://github.com/kevinushey/sourcetools/issues", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Packaged": "2018-04-25 03:19:22 UTC; kevin", + "Repository": "CRAN", + "Date/Publication": "2018-04-25 03:38:09 UTC", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-09-02 16:39:33 UTC; unix" + } + }, + "stringi": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "stringi", + "Version": "1.8.3", + "Date": "2023-12-10", + "Title": "Fast and Portable Character String Processing Facilities", + "Description": "A collection of character string/text/natural language\n processing tools for pattern searching (e.g., with 'Java'-like regular\n expressions or the 'Unicode' collation algorithm), random string generation,\n case mapping, string transliteration, concatenation, sorting, padding,\n wrapping, Unicode normalisation, date-time formatting and parsing,\n and many more. They are fast, consistent, convenient, and -\n thanks to 'ICU' (International Components for Unicode) -\n portable across all locales and platforms. Documentation about 'stringi' is\n provided via its website at and\n the paper by Gagolewski (2022, ).", + "URL": "https://stringi.gagolewski.com/,\nhttps://github.com/gagolews/stringi, https://icu.unicode.org/", + "BugReports": "https://github.com/gagolews/stringi/issues", + "SystemRequirements": "ICU4C (>= 61, optional)", + "Type": "Package", + "Depends": "R (>= 3.4)", + "Imports": "tools, utils, stats", + "Biarch": "TRUE", + "License": "file LICENSE", + "Author": "Marek Gagolewski [aut, cre, cph] (),\n Bartek Tartanus [ctb], and others (stringi source code);\n Unicode, Inc. and others (ICU4C source code, Unicode Character Database)", + "Maintainer": "Marek Gagolewski ", + "RoxygenNote": "7.2.3", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Packaged": "2023-12-10 07:26:05 UTC; gagolews", + "License_is_FOSS": "yes", + "Repository": "CRAN", + "Date/Publication": "2023-12-11 22:50:03 UTC", + "Built": "R 4.2.3; x86_64-pc-linux-gnu; 2024-03-27 21:00:29 UTC; unix" + } + }, + "stringr": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "stringr", + "Title": "Simple, Consistent Wrappers for Common String Operations", + "Version": "1.5.1", + "Authors@R": "c(\n person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\", \"cph\")),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", + "Description": "A consistent, simple and easy to use set of wrappers around\n the fantastic 'stringi' package. All function and argument names (and\n positions) are consistent, all functions deal with \"NA\"'s and zero\n length vectors in the same way, and the output from one function is\n easy to feed into the input of another.", + "License": "MIT + file LICENSE", + "URL": "https://stringr.tidyverse.org,\nhttps://github.com/tidyverse/stringr", + "BugReports": "https://github.com/tidyverse/stringr/issues", + "Depends": "R (>= 3.6)", + "Imports": "cli, glue (>= 1.6.1), lifecycle (>= 1.0.3), magrittr, rlang\n(>= 1.0.0), stringi (>= 1.5.3), vctrs (>= 0.4.0)", + "Suggests": "covr, dplyr, gt, htmltools, htmlwidgets, knitr, rmarkdown,\ntestthat (>= 3.0.0), tibble", + "VignetteBuilder": "knitr", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "LazyData": "true", + "RoxygenNote": "7.2.3", + "NeedsCompilation": "no", + "Packaged": "2023-11-14 15:03:52 UTC; hadleywickham", + "Author": "Hadley Wickham [aut, cre, cph],\n Posit Software, PBC [cph, fnd]", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN", + "Date/Publication": "2023-11-14 23:10:02 UTC", + "Built": "R 4.2.3; ; 2024-03-27 20:57:27 UTC; unix" + } + }, + "survival": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Title": "Survival Analysis", + "Priority": "recommended", + "Package": "survival", + "Version": "3.5-3", + "Date": "2023-02-06", + "Depends": "R (>= 3.5.0)", + "Imports": "graphics, Matrix, methods, splines, stats, utils", + "LazyData": "Yes", + "LazyDataCompression": "xz", + "ByteCompile": "Yes", + "Authors@R": "c(person(c(\"Terry\", \"M\"), \"Therneau\",\n email=\"therneau.terry@mayo.edu\",\n\t role=c(\"aut\", \"cre\")),\n person(\"Thomas\", \"Lumley\", role=c(\"ctb\", \"trl\"),\n\t comment=\"original S->R port and R maintainer until 2009\"),\n\t person(\"Atkinson\", \"Elizabeth\", role=\"ctb\"),\n\t person(\"Crowson\", \"Cynthia\", role=\"ctb\"))", + "Description": "Contains the core survival analysis routines, including\n\t definition of Surv objects, \n\t Kaplan-Meier and Aalen-Johansen (multi-state) curves, Cox models,\n\t and parametric accelerated failure time models.", + "License": "LGPL (>= 2)", + "URL": "https://github.com/therneau/survival", + "NeedsCompilation": "yes", + "Packaged": "2023-02-06 14:06:33 UTC; therneau", + "Author": "Terry M Therneau [aut, cre],\n Thomas Lumley [ctb, trl] (original S->R port and R maintainer until\n 2009),\n Atkinson Elizabeth [ctb],\n Crowson Cynthia [ctb]", + "Maintainer": "Terry M Therneau ", + "Repository": "CRAN", + "Date/Publication": "2023-02-12 21:30:05 UTC", + "Built": "R 4.2.3; x86_64-pc-linux-gnu; 2023-10-03 23:18:24 UTC; unix" + } + }, + "sys": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "sys", + "Type": "Package", + "Title": "Powerful and Reliable Tools for Running System Commands in R", + "Version": "3.4", + "Authors@R": "c(person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), \n email = \"jeroen@berkeley.edu\", comment = c(ORCID = \"0000-0002-4035-0289\")),\n person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = \"ctb\"))", + "Description": "Drop-in replacements for the base system2() function with fine control\n and consistent behavior across platforms. Supports clean interruption, timeout, \n background tasks, and streaming STDIN / STDOUT / STDERR over binary or text \n connections. Arguments on Windows automatically get encoded and quoted to work \n on different locales.", + "License": "MIT + file LICENSE", + "URL": "https://github.com/jeroen/sys", + "BugReports": "https://github.com/jeroen/sys/issues", + "Encoding": "UTF-8", + "LazyData": "true", + "RoxygenNote": "7.1.1", + "Suggests": "unix (>= 1.4), spelling, testthat", + "Language": "en-US", + "NeedsCompilation": "yes", + "Packaged": "2020-07-22 19:23:54 UTC; jeroen", + "Author": "Jeroen Ooms [aut, cre] (),\n Gábor Csárdi [ctb]", + "Maintainer": "Jeroen Ooms ", + "Repository": "CRAN", + "Date/Publication": "2020-07-23 04:30:02 UTC", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-09-02 16:47:55 UTC; unix" + } + }, + "tibble": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "tibble", + "Title": "Simple Data Frames", + "Version": "3.2.1", + "Authors@R": "\n c(person(given = \"Kirill\",\n family = \"M\\u00fcller\",\n role = c(\"aut\", \"cre\"),\n email = \"kirill@cynkra.com\",\n comment = c(ORCID = \"0000-0002-1416-3412\")),\n person(given = \"Hadley\",\n family = \"Wickham\",\n role = \"aut\",\n email = \"hadley@rstudio.com\"),\n person(given = \"Romain\",\n family = \"Francois\",\n role = \"ctb\",\n email = \"romain@r-enthusiasts.com\"),\n person(given = \"Jennifer\",\n family = \"Bryan\",\n role = \"ctb\",\n email = \"jenny@rstudio.com\"),\n person(given = \"RStudio\",\n role = c(\"cph\", \"fnd\")))", + "Description": "Provides a 'tbl_df' class (the 'tibble') with stricter checking and better formatting than the traditional\n data frame.", + "License": "MIT + file LICENSE", + "URL": "https://tibble.tidyverse.org/, https://github.com/tidyverse/tibble", + "BugReports": "https://github.com/tidyverse/tibble/issues", + "Depends": "R (>= 3.4.0)", + "Imports": "fansi (>= 0.4.0), lifecycle (>= 1.0.0), magrittr, methods,\npillar (>= 1.8.1), pkgconfig, rlang (>= 1.0.2), utils, vctrs\n(>= 0.4.2)", + "Suggests": "bench, bit64, blob, brio, callr, cli, covr, crayon (>=\n1.3.4), DiagrammeR, dplyr, evaluate, formattable, ggplot2,\nhere, hms, htmltools, knitr, lubridate, mockr, nycflights13,\npkgbuild, pkgload, purrr, rmarkdown, stringi, testthat (>=\n3.0.2), tidyr, withr", + "VignetteBuilder": "knitr", + "Encoding": "UTF-8", + "RoxygenNote": "7.2.3", + "Config/testthat/edition": "3", + "Config/testthat/parallel": "true", + "Config/testthat/start-first": "vignette-formats, as_tibble, add,\ninvariants", + "Config/autostyle/scope": "line_breaks", + "Config/autostyle/strict": "true", + "Config/autostyle/rmd": "false", + "Config/Needs/website": "tidyverse/tidytemplate", + "NeedsCompilation": "yes", + "Packaged": "2023-03-19 09:23:10 UTC; kirill", + "Author": "Kirill Müller [aut, cre] (),\n Hadley Wickham [aut],\n Romain Francois [ctb],\n Jennifer Bryan [ctb],\n RStudio [cph, fnd]", + "Maintainer": "Kirill Müller ", + "Repository": "CRAN", + "Date/Publication": "2023-03-20 06:30:02 UTC", + "Built": "R 4.2.3; x86_64-pc-linux-gnu; 2024-05-08 13:34:15 UTC; unix" + } + }, + "tidyr": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "tidyr", + "Title": "Tidy Messy Data", + "Version": "1.3.1", + "Authors@R": "c(\n person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")),\n person(\"Davis\", \"Vaughan\", , \"davis@posit.co\", role = \"aut\"),\n person(\"Maximilian\", \"Girlich\", role = \"aut\"),\n person(\"Kevin\", \"Ushey\", , \"kevin@posit.co\", role = \"ctb\"),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", + "Description": "Tools to help to create tidy data, where each column is a\n variable, each row is an observation, and each cell contains a single\n value. 'tidyr' contains tools for changing the shape (pivoting) and\n hierarchy (nesting and 'unnesting') of a dataset, turning deeply\n nested lists into rectangular data frames ('rectangling'), and\n extracting values out of string columns. It also includes tools for\n working with missing values (both implicit and explicit).", + "License": "MIT + file LICENSE", + "URL": "https://tidyr.tidyverse.org, https://github.com/tidyverse/tidyr", + "BugReports": "https://github.com/tidyverse/tidyr/issues", + "Depends": "R (>= 3.6)", + "Imports": "cli (>= 3.4.1), dplyr (>= 1.0.10), glue, lifecycle (>= 1.0.3),\nmagrittr, purrr (>= 1.0.1), rlang (>= 1.1.1), stringr (>=\n1.5.0), tibble (>= 2.1.1), tidyselect (>= 1.2.0), utils, vctrs\n(>= 0.5.2)", + "Suggests": "covr, data.table, knitr, readr, repurrrsive (>= 1.1.0),\nrmarkdown, testthat (>= 3.0.0)", + "LinkingTo": "cpp11 (>= 0.4.0)", + "VignetteBuilder": "knitr", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "LazyData": "true", + "RoxygenNote": "7.3.0", + "NeedsCompilation": "yes", + "Packaged": "2024-01-23 14:27:23 UTC; hadleywickham", + "Author": "Hadley Wickham [aut, cre],\n Davis Vaughan [aut],\n Maximilian Girlich [aut],\n Kevin Ushey [ctb],\n Posit Software, PBC [cph, fnd]", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN", + "Date/Publication": "2024-01-24 14:50:09 UTC", + "Built": "R 4.2.3; x86_64-pc-linux-gnu; 2024-05-08 13:35:32 UTC; unix" + } + }, + "tidyselect": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "tidyselect", + "Title": "Select from a Set of Strings", + "Version": "1.2.1", + "Authors@R": "c(\n person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = c(\"aut\", \"cre\")),\n person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", + "Description": "A backend for the selecting functions of the 'tidyverse'. It\n makes it easy to implement select-like functions in your own packages\n in a way that is consistent with other 'tidyverse' interfaces for\n selection.", + "License": "MIT + file LICENSE", + "URL": "https://tidyselect.r-lib.org, https://github.com/r-lib/tidyselect", + "BugReports": "https://github.com/r-lib/tidyselect/issues", + "Depends": "R (>= 3.4)", + "Imports": "cli (>= 3.3.0), glue (>= 1.3.0), lifecycle (>= 1.0.3), rlang\n(>= 1.0.4), vctrs (>= 0.5.2), withr", + "Suggests": "covr, crayon, dplyr, knitr, magrittr, rmarkdown, stringr,\ntestthat (>= 3.1.1), tibble (>= 2.1.3)", + "VignetteBuilder": "knitr", + "ByteCompile": "true", + "Config/testthat/edition": "3", + "Config/Needs/website": "tidyverse/tidytemplate", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.0.9000", + "NeedsCompilation": "yes", + "Packaged": "2024-03-11 11:46:04 UTC; lionel", + "Author": "Lionel Henry [aut, cre],\n Hadley Wickham [aut],\n Posit Software, PBC [cph, fnd]", + "Maintainer": "Lionel Henry ", + "Repository": "CRAN", + "Date/Publication": "2024-03-11 14:10:02 UTC", + "Built": "R 4.2.3; ; 2024-03-27 19:14:20 UTC; unix" + } + }, + "tinytex": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "tinytex", + "Type": "Package", + "Title": "Helper Functions to Install and Maintain TeX Live, and Compile\nLaTeX Documents", + "Version": "0.39", + "Authors@R": "c(\n person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\", \"cph\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\")),\n person(family = \"RStudio, PBC\", role = \"cph\"),\n person(\"Christophe\", \"Dervieux\", role = \"ctb\", comment = c(ORCID = \"0000-0003-4474-2498\")),\n person(\"Devon\", \"Ryan\", role = \"ctb\", email = \"dpryan79@gmail.com\", comment = c(ORCID = \"0000-0002-8549-0971\")),\n person(\"Ethan\", \"Heinzen\", role = \"ctb\"),\n person(\"Fernando\", \"Cagua\", role = \"ctb\"),\n person()\n )", + "Description": "Helper functions to install and maintain the 'LaTeX' distribution\n named 'TinyTeX' (), a lightweight, cross-platform,\n portable, and easy-to-maintain version of 'TeX Live'. This package also\n contains helper functions to compile 'LaTeX' documents, and install missing\n 'LaTeX' packages automatically.", + "Imports": "xfun (>= 0.29)", + "Suggests": "testit, rstudioapi", + "License": "MIT + file LICENSE", + "URL": "https://github.com/rstudio/tinytex", + "BugReports": "https://github.com/rstudio/tinytex/issues", + "Encoding": "UTF-8", + "RoxygenNote": "7.1.2", + "NeedsCompilation": "no", + "Packaged": "2022-05-16 22:04:04 UTC; yihui", + "Author": "Yihui Xie [aut, cre, cph] (),\n RStudio, PBC [cph],\n Christophe Dervieux [ctb] (),\n Devon Ryan [ctb] (),\n Ethan Heinzen [ctb],\n Fernando Cagua [ctb]", + "Maintainer": "Yihui Xie ", + "Repository": "RSPM", + "Date/Publication": "2022-05-16 23:30:02 UTC", + "Built": "R 4.1.0; ; 2022-11-07 14:38:49 UTC; unix" + } + }, + "tzdb": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "tzdb", + "Title": "Time Zone Database Information", + "Version": "0.2.0", + "Authors@R": "\n c(person(given = \"Davis\",\n family = \"Vaughan\",\n role = c(\"aut\", \"cre\"),\n email = \"davis@rstudio.com\"),\n person(given = \"Howard\",\n family = \"Hinnant\",\n role = \"cph\",\n comment = \"Author of the included date library\"),\n person(given = \"RStudio\",\n role = c(\"cph\", \"fnd\")))", + "Description": "Provides an up-to-date copy of the Internet Assigned Numbers\n Authority (IANA) Time Zone Database. It is updated periodically to\n reflect changes made by political bodies to time zone boundaries, UTC\n offsets, and daylight saving time rules. Additionally, this package\n provides a C++ interface for working with the 'date' library. 'date'\n provides comprehensive support for working with dates and date-times,\n which this package exposes to make it easier for other R packages to\n utilize. Headers are provided for calendar specific calculations,\n along with a limited interface for time zone manipulations.", + "License": "MIT + file LICENSE", + "URL": "https://r-lib.github.io/tzdb/, https://github.com/r-lib/tzdb", + "BugReports": "https://github.com/r-lib/tzdb/issues", + "Depends": "R (>= 3.3)", + "Suggests": "covr, testthat (>= 3.0.0)", + "LinkingTo": "cpp11 (>= 0.4.0)", + "Biarch": "yes", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.1.2", + "SystemRequirements": "C++11", + "NeedsCompilation": "yes", + "Packaged": "2021-10-27 12:57:38 UTC; davis", + "Author": "Davis Vaughan [aut, cre],\n Howard Hinnant [cph] (Author of the included date library),\n RStudio [cph, fnd]", + "Maintainer": "Davis Vaughan ", + "Repository": "CRAN", + "Date/Publication": "2021-10-27 13:20:02 UTC", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-11-05 08:07:55 UTC; unix" + } + }, + "utf8": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "utf8", + "Title": "Unicode Text Processing", + "Version": "1.2.2", + "Authors@R": "\n c(person(given = c(\"Patrick\", \"O.\"),\n family = \"Perry\",\n role = c(\"aut\", \"cph\")),\n person(given = \"Kirill\",\n family = \"M\\u00fcller\",\n role = \"cre\",\n email = \"krlmlr+r@mailbox.org\"),\n person(given = \"Unicode, Inc.\",\n role = c(\"cph\", \"dtc\"),\n comment = \"Unicode Character Database\"))", + "Description": "Process and print 'UTF-8' encoded international\n text (Unicode). Input, validate, normalize, encode, format, and\n display.", + "License": "Apache License (== 2.0) | file LICENSE", + "URL": "https://ptrckprry.com/r-utf8/, https://github.com/patperry/r-utf8", + "BugReports": "https://github.com/patperry/r-utf8/issues", + "Depends": "R (>= 2.10)", + "Suggests": "cli, covr, knitr, rlang, rmarkdown, testthat (>= 3.0.0),\nwithr", + "VignetteBuilder": "knitr, rmarkdown", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Packaged": "2021-07-24 08:19:25 UTC; kirill", + "Author": "Patrick O. Perry [aut, cph],\n Kirill Müller [cre],\n Unicode, Inc. [cph, dtc] (Unicode Character Database)", + "Maintainer": "Kirill Müller ", + "Repository": "CRAN", + "Date/Publication": "2021-07-24 15:00:02 UTC", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-09-07 20:16:44 UTC; unix" + } + }, + "vctrs": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "vctrs", + "Title": "Vector Helpers", + "Version": "0.6.5", + "Authors@R": "c(\n person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"),\n person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = \"aut\"),\n person(\"Davis\", \"Vaughan\", , \"davis@posit.co\", role = c(\"aut\", \"cre\")),\n person(\"data.table team\", role = \"cph\",\n comment = \"Radix sort based on data.table's forder() and their contribution to R's order()\"),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", + "Description": "Defines new notions of prototype and size that are used to\n provide tools for consistent and well-founded type-coercion and\n size-recycling, and are in turn connected to ideas of type- and\n size-stability useful for analysing function interfaces.", + "License": "MIT + file LICENSE", + "URL": "https://vctrs.r-lib.org/, https://github.com/r-lib/vctrs", + "BugReports": "https://github.com/r-lib/vctrs/issues", + "Depends": "R (>= 3.5.0)", + "Imports": "cli (>= 3.4.0), glue, lifecycle (>= 1.0.3), rlang (>= 1.1.0)", + "Suggests": "bit64, covr, crayon, dplyr (>= 0.8.5), generics, knitr,\npillar (>= 1.4.4), pkgdown (>= 2.0.1), rmarkdown, testthat (>=\n3.0.0), tibble (>= 3.1.3), waldo (>= 0.2.0), withr, xml2,\nzeallot", + "VignetteBuilder": "knitr", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "Language": "en-GB", + "RoxygenNote": "7.2.3", + "NeedsCompilation": "yes", + "Packaged": "2023-12-01 16:27:12 UTC; davis", + "Author": "Hadley Wickham [aut],\n Lionel Henry [aut],\n Davis Vaughan [aut, cre],\n data.table team [cph] (Radix sort based on data.table's forder() and\n their contribution to R's order()),\n Posit Software, PBC [cph, fnd]", + "Maintainer": "Davis Vaughan ", + "Repository": "CRAN", + "Date/Publication": "2023-12-01 23:50:02 UTC", + "Built": "R 4.2.3; x86_64-pc-linux-gnu; 2024-03-07 18:15:23 UTC; unix" + } + }, + "viridis": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "viridis", + "Type": "Package", + "Title": "Colorblind-Friendly Color Maps for R", + "Version": "0.6.2", + "Authors@R": "c(\n person(\"Simon\", \"Garnier\", email = \"garnier@njit.edu\", role = c(\"aut\", \"cre\")),\n person(\"Noam\", \"Ross\", email = \"noam.ross@gmail.com\", role = c(\"ctb\", \"cph\")),\n person(\"Bob\", \"Rudis\", email = \"bob@rud.is\", role = c(\"ctb\", \"cph\")),\n person(\"Marco\", \"Sciaini\", email = \"sciaini.marco@gmail.com\", role = c(\"ctb\", \"cph\")),\n person(\"Antônio Pedro\", \"Camargo\", role = c(\"ctb\", \"cph\")),\n person(\"Cédric\", \"Scherer\", email = \"scherer@izw-berlin.de\", role = c(\"ctb\", \"cph\"))\n )", + "Maintainer": "Simon Garnier ", + "Description": "Color maps designed to improve graph readability for readers with \n common forms of color blindness and/or color vision deficiency. The color \n maps are also perceptually-uniform, both in regular form and also when \n converted to black-and-white for printing. This package also contains \n 'ggplot2' bindings for discrete and continuous color and fill scales. A lean\n version of the package called 'viridisLite' that does not include the \n 'ggplot2' bindings can be found at \n .", + "License": "MIT + file LICENSE", + "Encoding": "UTF-8", + "Depends": "R (>= 2.10), viridisLite (>= 0.4.0)", + "Imports": "stats, ggplot2 (>= 1.0.1), gridExtra", + "Suggests": "hexbin (>= 1.27.0), scales, MASS, knitr, dichromat,\ncolorspace, raster, rasterVis, httr, mapproj, vdiffr, svglite\n(>= 1.2.0), testthat, covr, rmarkdown, rgdal, maps", + "LazyData": "true", + "VignetteBuilder": "knitr", + "URL": "https://sjmgarnier.github.io/viridis/,\nhttps://github.com/sjmgarnier/viridis/", + "BugReports": "https://github.com/sjmgarnier/viridis/issues", + "RoxygenNote": "7.1.2", + "NeedsCompilation": "no", + "Packaged": "2021-10-13 12:03:30 UTC; simon", + "Author": "Simon Garnier [aut, cre],\n Noam Ross [ctb, cph],\n Bob Rudis [ctb, cph],\n Marco Sciaini [ctb, cph],\n Antônio Pedro Camargo [ctb, cph],\n Cédric Scherer [ctb, cph]", + "Repository": "CRAN", + "Date/Publication": "2021-10-13 20:50:02 UTC", + "Built": "R 4.1.0; ; 2022-11-05 08:14:24 UTC; unix" + } + }, + "viridisLite": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "viridisLite", + "Type": "Package", + "Title": "Colorblind-Friendly Color Maps (Lite Version)", + "Version": "0.4.2", + "Date": "2023-05-02", + "Authors@R": "c(\n person(\"Simon\", \"Garnier\", email = \"garnier@njit.edu\", role = c(\"aut\", \"cre\")),\n person(\"Noam\", \"Ross\", email = \"noam.ross@gmail.com\", role = c(\"ctb\", \"cph\")),\n person(\"Bob\", \"Rudis\", email = \"bob@rud.is\", role = c(\"ctb\", \"cph\")),\n person(\"Marco\", \"Sciaini\", email = \"sciaini.marco@gmail.com\", role = c(\"ctb\", \"cph\")),\n person(\"Antônio Pedro\", \"Camargo\", role = c(\"ctb\", \"cph\")),\n person(\"Cédric\", \"Scherer\", email = \"scherer@izw-berlin.de\", role = c(\"ctb\", \"cph\"))\n )", + "Maintainer": "Simon Garnier ", + "Description": "Color maps designed to improve graph readability for readers with \n common forms of color blindness and/or color vision deficiency. The color \n maps are also perceptually-uniform, both in regular form and also when \n converted to black-and-white for printing. This is the 'lite' version of the \n 'viridis' package that also contains 'ggplot2' bindings for discrete and \n continuous color and fill scales and can be found at \n .", + "License": "MIT + file LICENSE", + "Encoding": "UTF-8", + "Depends": "R (>= 2.10)", + "Suggests": "hexbin (>= 1.27.0), ggplot2 (>= 1.0.1), testthat, covr", + "URL": "https://sjmgarnier.github.io/viridisLite/,\nhttps://github.com/sjmgarnier/viridisLite/", + "BugReports": "https://github.com/sjmgarnier/viridisLite/issues/", + "RoxygenNote": "7.2.3", + "NeedsCompilation": "no", + "Packaged": "2023-05-02 21:38:46 UTC; simon", + "Author": "Simon Garnier [aut, cre],\n Noam Ross [ctb, cph],\n Bob Rudis [ctb, cph],\n Marco Sciaini [ctb, cph],\n Antônio Pedro Camargo [ctb, cph],\n Cédric Scherer [ctb, cph]", + "Repository": "CRAN", + "Date/Publication": "2023-05-02 23:50:02 UTC", + "Built": "R 4.2.3; ; 2024-04-02 14:43:28 UTC; unix" + } + }, + "vroom": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "vroom", + "Title": "Read and Write Rectangular Text Data Quickly", + "Version": "1.5.7", + "Authors@R": "\n c(person(given = \"Jim\",\n family = \"Hester\",\n role = \"aut\",\n email = \"jim.hester@rstudio.com\",\n comment = c(ORCID = \"0000-0002-2739-7082\")),\n person(given = \"Hadley\",\n family = \"Wickham\",\n role = \"aut\",\n email = \"hadley@rstudio.com\",\n comment = c(ORCID = \"0000-0003-4757-117X\")),\n person(given = \"Jennifer\",\n family = \"Bryan\",\n role = c(\"aut\", \"cre\"),\n email = \"jenny@rstudio.com\",\n comment = c(ORCID = \"0000-0002-6983-2759\")),\n person(given = \"https://github.com/mandreyel/\",\n role = \"cph\",\n comment = \"mio library\"),\n person(given = \"Jukka\",\n family = \"Jylänki\",\n role = \"cph\",\n comment = \"grisu3 implementation\"),\n person(given = \"Mikkel\",\n family = \"Jørgensen\",\n role = \"cph\",\n comment = \"grisu3 implementation\"),\n person(given = \"RStudio\",\n role = c(\"cph\", \"fnd\")))", + "Description": "The goal of 'vroom' is to read and write data (like\n 'csv', 'tsv' and 'fwf') quickly. When reading it uses a quick initial\n indexing step, then reads the values lazily , so only the data you\n actually use needs to be read. The writer formats the data in\n parallel and writes to disk asynchronously from formatting.", + "License": "MIT + file LICENSE", + "URL": "https://vroom.r-lib.org, https://github.com/r-lib/vroom", + "BugReports": "https://github.com/r-lib/vroom/issues", + "Depends": "R (>= 3.1)", + "Imports": "bit64, crayon, cli, glue, hms, lifecycle, methods, rlang (>=\n0.4.2), stats, tibble (>= 2.0.0), tzdb (>= 0.1.1), vctrs (>=\n0.2.0), tidyselect, withr", + "Suggests": "archive, bench (>= 1.1.0), covr, curl, dplyr, forcats, fs,\nggplot2, knitr, patchwork, prettyunits, purrr, rmarkdown,\nrstudioapi, scales, spelling, testthat (>= 2.1.0), tidyr,\nutils, waldo, xml2", + "LinkingTo": "progress (>= 1.2.1), cpp11 (>= 0.2.0), tzdb (>= 0.1.1)", + "VignetteBuilder": "knitr", + "Config/testthat/edition": "3", + "Config/testthat/parallel": "false", + "Config/Needs/website": "nycflights13", + "Copyright": "file COPYRIGHTS", + "Encoding": "UTF-8", + "Language": "en-US", + "RoxygenNote": "7.1.2", + "SystemRequirements": "C++11", + "NeedsCompilation": "yes", + "Packaged": "2021-11-29 22:18:11 UTC; jhester", + "Author": "Jim Hester [aut] (),\n Hadley Wickham [aut] (),\n Jennifer Bryan [aut, cre] (),\n https://github.com/mandreyel/ [cph] (mio library),\n Jukka Jylänki [cph] (grisu3 implementation),\n Mikkel Jørgensen [cph] (grisu3 implementation),\n RStudio [cph, fnd]", + "Maintainer": "Jennifer Bryan ", + "Repository": "CRAN", + "Date/Publication": "2021-11-30 14:20:06 UTC", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-11-05 08:15:08 UTC; unix" + } + }, + "withr": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "withr", + "Title": "Run Code 'With' Temporarily Modified Global State", + "Version": "2.5.0", + "Authors@R": "\n c(person(given = \"Jim\",\n family = \"Hester\",\n role = \"aut\"),\n person(given = \"Lionel\",\n family = \"Henry\",\n role = c(\"aut\", \"cre\"),\n email = \"lionel@rstudio.com\"),\n person(given = \"Kirill\",\n family = \"Müller\",\n role = \"aut\",\n email = \"krlmlr+r@mailbox.org\"),\n person(given = \"Kevin\",\n family = \"Ushey\",\n role = \"aut\",\n email = \"kevinushey@gmail.com\"),\n person(given = \"Hadley\",\n family = \"Wickham\",\n role = \"aut\",\n email = \"hadley@rstudio.com\"),\n person(given = \"Winston\",\n family = \"Chang\",\n role = \"aut\"),\n person(given = \"Jennifer\",\n family = \"Bryan\",\n role = \"ctb\"),\n person(given = \"Richard\",\n family = \"Cotton\",\n role = \"ctb\"),\n person(given = \"RStudio\",\n role = c(\"cph\", \"fnd\")))", + "Description": "A set of functions to run code 'with' safely and\n temporarily modified global state. Many of these functions were\n originally a part of the 'devtools' package, this provides a simple\n package with limited dependencies to provide access to these\n functions.", + "License": "MIT + file LICENSE", + "URL": "https://withr.r-lib.org, https://github.com/r-lib/withr#readme", + "BugReports": "https://github.com/r-lib/withr/issues", + "Depends": "R (>= 3.2.0)", + "Imports": "graphics, grDevices, stats", + "Suggests": "callr, covr, DBI, knitr, lattice, methods, rlang, rmarkdown\n(>= 2.12), RSQLite, testthat (>= 3.0.0)", + "VignetteBuilder": "knitr", + "Encoding": "UTF-8", + "RoxygenNote": "7.1.2", + "Collate": "'aaa.R' 'collate.R' 'compat-defer.R' 'connection.R' 'db.R'\n'defer.R' 'wrap.R' 'local_.R' 'with_.R' 'devices.R' 'dir.R'\n'env.R' 'file.R' 'language.R' 'libpaths.R' 'locale.R'\n'makevars.R' 'namespace.R' 'options.R' 'par.R' 'path.R' 'rng.R'\n'seed.R' 'sink.R' 'tempfile.R' 'timezone.R' 'torture.R'\n'utils.R' 'with.R'", + "Config/testthat/edition": "3", + "Config/Needs/website": "tidyverse/tidytemplate", + "NeedsCompilation": "no", + "Packaged": "2022-03-03 21:13:01 UTC; lionel", + "Author": "Jim Hester [aut],\n Lionel Henry [aut, cre],\n Kirill Müller [aut],\n Kevin Ushey [aut],\n Hadley Wickham [aut],\n Winston Chang [aut],\n Jennifer Bryan [ctb],\n Richard Cotton [ctb],\n RStudio [cph, fnd]", + "Maintainer": "Lionel Henry ", + "Repository": "CRAN", + "Date/Publication": "2022-03-03 21:50:02 UTC", + "Built": "R 4.1.0; ; 2022-09-02 16:40:36 UTC; unix" + } + }, + "xfun": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "xfun", + "Type": "Package", + "Title": "Supporting Functions for Packages Maintained by 'Yihui Xie'", + "Version": "0.31", + "Authors@R": "c(\n person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\", \"cph\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\")),\n person(\"Wush\", \"Wu\", role = \"ctb\"),\n person(\"Daijiang\", \"Li\", role = \"ctb\"),\n person(\"Xianying\", \"Tan\", role = \"ctb\"),\n person(\"Salim\", \"Brüggemann\", role = \"ctb\", email = \"salim-b@pm.me\", comment = c(ORCID = \"0000-0002-5329-5987\")),\n person(\"Christophe\", \"Dervieux\", role = \"ctb\"),\n person()\n )", + "Description": "Miscellaneous functions commonly used in other packages maintained by 'Yihui Xie'.", + "Imports": "stats, tools", + "Suggests": "testit, parallel, codetools, rstudioapi, tinytex (>= 0.30),\nmime, markdown, knitr, htmltools, remotes, pak, rhub, renv,\ncurl, jsonlite, rmarkdown", + "License": "MIT + file LICENSE", + "URL": "https://github.com/yihui/xfun", + "BugReports": "https://github.com/yihui/xfun/issues", + "Encoding": "UTF-8", + "RoxygenNote": "7.1.2", + "VignetteBuilder": "knitr", + "NeedsCompilation": "yes", + "Packaged": "2022-05-10 20:06:27 UTC; yihui", + "Author": "Yihui Xie [aut, cre, cph] (),\n Wush Wu [ctb],\n Daijiang Li [ctb],\n Xianying Tan [ctb],\n Salim Brüggemann [ctb] (),\n Christophe Dervieux [ctb]", + "Maintainer": "Yihui Xie ", + "Repository": "RSPM", + "Date/Publication": "2022-05-10 20:30:02 UTC", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-09-07 20:33:28 UTC; unix" + } + }, + "xtable": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "xtable", + "Version": "1.8-4", + "Date": "2019-04-08", + "Title": "Export Tables to LaTeX or HTML", + "Authors@R": "c(person(\"David B.\", \"Dahl\", role=\"aut\"),\n person(\"David\", \"Scott\", role=c(\"aut\",\"cre\"),\n email=\"d.scott@auckland.ac.nz\"),\n person(\"Charles\", \"Roosen\", role=\"aut\"),\n person(\"Arni\", \"Magnusson\", role=\"aut\"),\n person(\"Jonathan\", \"Swinton\", role=\"aut\"),\n person(\"Ajay\", \"Shah\", role=\"ctb\"),\n person(\"Arne\", \"Henningsen\", role=\"ctb\"),\n person(\"Benno\", \"Puetz\", role=\"ctb\"),\n person(\"Bernhard\", \"Pfaff\", role=\"ctb\"),\n person(\"Claudio\", \"Agostinelli\", role=\"ctb\"),\n person(\"Claudius\", \"Loehnert\", role=\"ctb\"),\n person(\"David\", \"Mitchell\", role=\"ctb\"),\n person(\"David\", \"Whiting\", role=\"ctb\"),\n person(\"Fernando da\", \"Rosa\", role=\"ctb\"),\n person(\"Guido\", \"Gay\", role=\"ctb\"),\n person(\"Guido\", \"Schulz\", role=\"ctb\"),\n person(\"Ian\", \"Fellows\", role=\"ctb\"),\n person(\"Jeff\", \"Laake\", role=\"ctb\"),\n person(\"John\", \"Walker\", role=\"ctb\"),\n person(\"Jun\", \"Yan\", role=\"ctb\"),\n person(\"Liviu\", \"Andronic\", role=\"ctb\"),\n person(\"Markus\", \"Loecher\", role=\"ctb\"),\n person(\"Martin\", \"Gubri\", role=\"ctb\"),\n person(\"Matthieu\", \"Stigler\", role=\"ctb\"),\n person(\"Robert\", \"Castelo\", role=\"ctb\"),\n person(\"Seth\", \"Falcon\", role=\"ctb\"),\n person(\"Stefan\", \"Edwards\", role=\"ctb\"),\n person(\"Sven\", \"Garbade\", role=\"ctb\"),\n person(\"Uwe\", \"Ligges\", role=\"ctb\"))", + "Maintainer": "David Scott ", + "Imports": "stats, utils", + "Suggests": "knitr, plm, zoo, survival", + "VignetteBuilder": "knitr", + "Description": "Coerce data to LaTeX and HTML tables.", + "URL": "http://xtable.r-forge.r-project.org/", + "Depends": "R (>= 2.10.0)", + "License": "GPL (>= 2)", + "Repository": "CRAN", + "NeedsCompilation": "no", + "Packaged": "2019-04-21 10:56:51 UTC; dsco036", + "Author": "David B. Dahl [aut],\n David Scott [aut, cre],\n Charles Roosen [aut],\n Arni Magnusson [aut],\n Jonathan Swinton [aut],\n Ajay Shah [ctb],\n Arne Henningsen [ctb],\n Benno Puetz [ctb],\n Bernhard Pfaff [ctb],\n Claudio Agostinelli [ctb],\n Claudius Loehnert [ctb],\n David Mitchell [ctb],\n David Whiting [ctb],\n Fernando da Rosa [ctb],\n Guido Gay [ctb],\n Guido Schulz [ctb],\n Ian Fellows [ctb],\n Jeff Laake [ctb],\n John Walker [ctb],\n Jun Yan [ctb],\n Liviu Andronic [ctb],\n Markus Loecher [ctb],\n Martin Gubri [ctb],\n Matthieu Stigler [ctb],\n Robert Castelo [ctb],\n Seth Falcon [ctb],\n Stefan Edwards [ctb],\n Sven Garbade [ctb],\n Uwe Ligges [ctb]", + "Date/Publication": "2019-04-21 12:20:03 UTC", + "Built": "R 4.1.0; ; 2022-09-02 16:39:21 UTC; unix" + } + }, + "yaml": { + "Source": "CRAN", + "Repository": "https://nexus2.fda.gov/repository/r-proxy", + "description": { + "Package": "yaml", + "Type": "Package", + "Title": "Methods to Convert R Data to YAML and Back", + "Date": "2022-01-24", + "Version": "2.3.5", + "Suggests": "RUnit", + "Author": "Shawn P Garbett [aut], Jeremy Stephens [aut, cre], Kirill Simonov [aut], Yihui Xie [ctb],\n Zhuoer Dong [ctb], Hadley Wickham [ctb], Jeffrey Horner [ctb], reikoch [ctb],\n Will Beasley [ctb], Brendan O'Connor [ctb], Gregory R. Warnes [ctb],\n Michael Quinn [ctb], Zhian N. Kamvar [ctb]", + "Maintainer": "Shawn Garbett ", + "License": "BSD_3_clause + file LICENSE", + "Description": "Implements the 'libyaml' 'YAML' 1.1 parser and emitter\n () for R.", + "URL": "https://github.com/vubiostat/r-yaml/", + "BugReports": "https://github.com/vubiostat/r-yaml/issues", + "NeedsCompilation": "yes", + "Packaged": "2022-02-19 02:41:00 UTC; garbetsp", + "Repository": "CRAN", + "Date/Publication": "2022-02-21 09:20:02 UTC", + "Built": "R 4.1.0; x86_64-pc-linux-gnu; 2022-09-02 16:31:21 UTC; unix" + } + } + }, + "files": { + ".Rbuildignore": { + "checksum": "24e2d083004a9ea187bf1fe5d1a5b9b1" + }, + "Amin_liver_scoring.R": { + "checksum": "767e886e7e52c545dd4547da58cc53da" + }, + "app.R": { + "checksum": "e39f313cbf964d2c90495ed996d932c3" + }, + "DESCRIPTION": { + "checksum": "65a8b715af26243d13a34b81a52a8b2d" + }, + "man/get_all_score.Rd": { + "checksum": "0e6474524d766ec28419dbff43b86963" + }, + "man/get_bw_score.Rd": { + "checksum": "638a268e03e30e2321562278e4649739" + }, + "man/get_compile_data.Rd": { + "checksum": "9b910d18eddc4bc7934257f09a4c0838" + }, + "man/get_doses.Rd": { + "checksum": "078ad095d147c3e886819115e7f9bac1" + }, + "man/get_lb_score.Rd": { + "checksum": "094f749d7d3da212359953e0c3b96d3c" + }, + "man/get_mi_score.Rd": { + "checksum": "fdedb04983cc3097a2b5a026cbf0efb2" + }, + "man/get_treatment_group.Rd": { + "checksum": "2cfa449539a7e166dac70334d0c917b6" + }, + "man/groupSEND.Rd": { + "checksum": "997042a210af50d85051dfb17387db72" + }, + "man/send_cross_study_app.Rd": { + "checksum": "c76c7453e3b8773ae05c7f844f50a1f6" + }, + "NAMESPACE": { + "checksum": "8afdb92a83da412de5a03f7e9cb955a4" + }, + "R/addUIDep.R": { + "checksum": "a809b0195a66f0f56a346da55586e090" + }, + "R/CrossStudyVisualizationApp_LoadExternal.R": { + "checksum": "14476cb1f730699fe47707cd39cc4599" + }, + "R/Functions.R": { + "checksum": "87aec75524f95a4a0a45d70fde11c3ea" + }, + "R/get_bw_score.R": { + "checksum": "8af16ab6bc142e97a8089873baf04aaa" + }, + "R/get_compile_data.R": { + "checksum": "99bb434eed25d9519b0f2e11be0cf542" + }, + "R/get_doses.R": { + "checksum": "f01371c2f58e53d7a071d7fb22e97ec9" + }, + "R/get_final_score.R": { + "checksum": "2932c334862798168030b1de7b358f78" + }, + "R/get_lb_score.R": { + "checksum": "3c30d7ef074acd9081eb40e9220280eb" + }, + "R/get_mi_score.R": { + "checksum": "15b92c106fb20849984aa17ed0528841" + }, + "R/get_treatment_group.R": { + "checksum": "4085ef65a94b9db0c34ad83ce61c77c7" + }, + "R/groupSEND.R": { + "checksum": "c1e4babb0fabdbc23ad5889d37388de1" + }, + "R/makeBarPlot.R": { + "checksum": "967da058f4c963e9e7e4effa422b626c" + }, + "R/makeBWPlot.R": { + "checksum": "bde7fbfed09d0682ae64a95c95b27ab2" + }, + "R/makeFWPlot.R": { + "checksum": "0eeec343ce90bcb6e3a8f2e4962c6242" + }, + "R/makeLBPlot.R": { + "checksum": "916cdabb4c2b94527f39c5a88da98a58" + }, + "R/makeMIPlot.R": { + "checksum": "66739225079cc3cf786759ef9445f416" + }, + "R/makeOMPlot.R": { + "checksum": "525039b93c197e54675f81ce5bd5293b" + }, + "R/makeRadar.R": { + "checksum": "96b5ff74eebb3c1cc4a0130f10e9ea1b" + }, + "R/radarchart_point.R": { + "checksum": "bc55271c418c75d383a0cbd5407f90d3" + }, + "README.md": { + "checksum": "d1db752fb9706a96180ad69aa6000d85" + } + }, + "users": null +}