├── R └── differential.R ├── README.md ├── _targets.R ├── _targets ├── .gitignore └── meta │ └── meta ├── data ├── sample_measurements.csv └── sample_metadata.csv ├── dependency_network.png ├── doc ├── differential_report.Rmd ├── differential_report.html ├── exploration.Rmd ├── exploration.html └── exploration_child.Rmd ├── packages.R └── renv.lock /R/differential.R: -------------------------------------------------------------------------------- 1 | normalize_samples = function(lipid_measurements){ 2 | # do normalization in here and return the df 3 | # tar_load(lipid_measurements) 4 | numeric_only = lipid_measurements |> 5 | dplyr::select(-feature_id, -class, -name, -group_units) 6 | numeric_long = numeric_only |> 7 | tidyr::pivot_longer(cols = everything(), names_to = "sample", values_to = "abundance") 8 | med_vals = numeric_long |> 9 | dplyr::filter(!is.na(abundance)) |> 10 | dplyr::group_by(sample) |> 11 | dplyr::summarise(median = median(abundance)) 12 | 13 | norm_values = purrr::map_dfc(med_vals$sample, function(in_sample){ 14 | use_norm = med_vals |> 15 | dplyr::filter(sample %in% in_sample) |> 16 | dplyr::pull(median) 17 | numeric_only[[in_sample]] / use_norm 18 | }) 19 | names(norm_values) = med_vals$sample 20 | 21 | norm_values$feature_id = lipid_measurements$feature_id 22 | norm_values 23 | 24 | } 25 | 26 | impute_missing = function(lipid_normalized){ 27 | # do imputation 28 | # tar_load(lipid_normalized) 29 | numeric_long = lipid_normalized |> 30 | tidyr::pivot_longer(cols = -feature_id, names_to = "sample", values_to = "abundance") 31 | log_dist = log(numeric_long$abundance) 32 | min_log = min(log_dist, na.rm = TRUE) 33 | impute_val = exp(min_log + (min_log * 0.1)) 34 | numeric_long$abundance[is.na(numeric_long$abundance)] = impute_val 35 | 36 | imputed_data = numeric_long |> 37 | tidyr::pivot_wider(id_cols = "feature_id", names_from = "sample", values_from = "abundance") 38 | imputed_data 39 | } 40 | 41 | differential_test = function(lipid_imputed, lipid_metadata){ 42 | # do differential test via limma 43 | # tar_load(lipid_imputed) 44 | # tar_load(lipid_metadata) 45 | log_matrix = lipid_imputed |> 46 | dplyr::select(all_of(lipid_metadata$sample_id)) |> 47 | as.matrix() |> 48 | log2() 49 | rownames(log_matrix) = lipid_imputed$feature_id 50 | 51 | lipid_metadata$group_info = factor(lipid_metadata$group_units, levels = c("WT", "KO"), ordered = TRUE) 52 | design_matrix = model.matrix(~ group_info, lipid_metadata) 53 | log_fit = limma::lmFit(log_matrix, design = design_matrix) 54 | log_fit = limma::eBayes(log_fit) 55 | log_limma = limma::topTable(log_fit, coef = "group_info.L", number = Inf, p.value = 1, sort.by = "none") 56 | log_limma$feature_id = rownames(log_matrix) 57 | log_limma 58 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Setup 2 | 3 | ```r 4 | tflow::use_tflow() 5 | ✔ Setting active project to '/home/rmflight/Projects/personal/example_targets_workflow' 6 | ✔ Creating 'R/' 7 | ✔ Writing 'packages.R' 8 | ✔ Writing '_targets.R' 9 | ✔ Writing '.env' 10 | ``` 11 | 12 | ## Add Data 13 | 14 | Put the data files in there. 15 | 16 | ```r 17 | dir("data") 18 | [1] "sample_measurements.csv" "sample_metadata.csv" 19 | ``` 20 | 21 | 22 | ## First tar_make() 23 | 24 | ```r 25 | > tar_make() 26 | • start target measurement_file 27 | • built target measurement_file 28 | • start target metadata_file 29 | • built target metadata_file 30 | • end pipeline: 0.06 seconds 31 | ``` 32 | 33 | ## Second tar_make() 34 | 35 | ```r 36 | tar_make() 37 | ✔ skip target measurement_file 38 | ✔ skip target metadata_file 39 | • start target lipid_measurements 40 | Rows: 1012 Columns: 16 41 | ── Column specification ──────────────────────────────────────────────────────── 42 | Delimiter: "," 43 | chr (4): class, name, group_units, feature_id 44 | dbl (12): WT_1, WT_2, WT_3, WT_4, WT_5, WT_6, KO_1, KO_2, KO_3, KO_4, KO_5, ... 45 | 46 | ℹ Use `spec()` to retrieve the full column specification for this data. 47 | ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message. 48 | Rows: 12 Columns: 18 49 | ── Column specification ──────────────────────────────────────────────────────── 50 | Delimiter: "," 51 | chr (10): parent_sample_name, assay, cell_line, client_matrix, client_sample... 52 | dbl (8): client_identifier, client_sample_number, group_number, sample_amou... 53 | • built target lipid_measurements 54 | • start target lipid_metadata 55 | \ 56 | ℹ Use `spec()` to retrieve the full column specification for this data. 57 | ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message. 58 | • built target lipid_metadata 59 | • end pipeline: 0.456 seconds 60 | ``` 61 | 62 | ## Adding EDA 63 | 64 | ```r 65 | > tar_make() 66 | ✔ skip target measurement_file 67 | ✔ skip target metadata_file 68 | ✔ skip target lipid_measurements 69 | ✔ skip target lipid_metadata 70 | • start target exploration 71 | • built target exploration 72 | • end pipeline: 2.606 second 73 | ``` 74 | 75 | ## Adding Normalization, Imputation, Differential Testing 76 | 77 | ```r 78 | > tar_make() 79 | ✔ skip target measurement_file 80 | ✔ skip target metadata_file 81 | ✔ skip target lipid_measurements 82 | ✔ skip target lipid_metadata 83 | • start target lipid_normalized 84 | • built target lipid_normalized 85 | ✔ skip target exploration 86 | • start target lipid_imputed 87 | • built target lipid_imputed 88 | • start target lipids_differential 89 | • built target lipids_differential 90 | • end pipeline: 0.118 seconds 91 | ``` 92 | 93 | ## And Differential Report 94 | 95 | ```r 96 | > tar_make() 97 | ✔ skip target measurement_file 98 | ✔ skip target metadata_file 99 | • start target differential_report 100 | • built target differential_report 101 | ✔ skip target lipid_measurements 102 | ✔ skip target lipid_metadata 103 | ✔ skip target lipid_normalized 104 | ✔ skip target exploration 105 | ✔ skip target lipid_imputed 106 | ✔ skip target lipids_differential 107 | • end pipeline: 0.63 seconds 108 | ``` 109 | 110 | ## To Have EDA Always Re-Render First 111 | 112 | If you wanted to always make sure that the EDA full report got rendered first, then you can add it to the `tar_load` call at the top of the `differential_report.Rmd`. 113 | 114 | ```r 115 | tar_load(c(exploration, 116 | exploration_child, 117 | lipids_differential)) 118 | ``` 119 | 120 | This makes it part of the dependency graph for the `differential_report`. 121 | 122 | ![target object network](dependency_network.png) 123 | -------------------------------------------------------------------------------- /_targets.R: -------------------------------------------------------------------------------- 1 | ## Load your packages, e.g. library(targets). 2 | source("./packages.R") 3 | 4 | ## Load your R files 5 | lapply(list.files("./R", full.names = TRUE), source) 6 | 7 | ## tar_plan supports drake-style targets and also tar_target() 8 | tar_plan( 9 | 10 | # setup the file data sources first, so if they change, 11 | # everything else will get rerun. 12 | # Because we want to indicate the type of target specifically to be 13 | # a "file", we use the `tar_target` format. 14 | tar_target(measurement_file, 15 | "data/sample_measurements.csv", 16 | format = "file"), 17 | tar_target(metadata_file, 18 | "data/sample_metadata.csv", 19 | format = "file"), 20 | 21 | # actually read data in 22 | # This is drake style target definition, which I prefer, and can be done 23 | # for most other types of targets outside of documents. 24 | lipid_measurements = readr::read_csv(measurement_file), 25 | lipid_metadata = readr::read_csv(metadata_file), 26 | 27 | # next we want to explore the data and evaluate if there is any funny 28 | # things we need to worry about. 29 | # I prefer to do that in an rmarkdown or quarto document. 30 | # Use tflow::use_rmd("document") to set this up. 31 | tar_render(exploration, "doc/exploration.Rmd"), 32 | 33 | # next, we do sample normalization using median values. 34 | # We are going to use a function to do that. 35 | lipid_normalized = normalize_samples(lipid_measurements), 36 | 37 | # and then a simple imputation method 38 | lipid_imputed = impute_missing(lipid_normalized), 39 | 40 | # and then do differential analysis 41 | lipids_differential = differential_test(lipid_imputed, lipid_metadata), 42 | 43 | tar_target(exploration_child, 44 | "doc/exploration_child.Rmd", 45 | format = "file"), 46 | 47 | 48 | # and then generate final report 49 | tar_render(differential_report, "doc/differential_report.Rmd") 50 | ) 51 | -------------------------------------------------------------------------------- /_targets/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | !meta 4 | meta/* 5 | !meta/meta 6 | -------------------------------------------------------------------------------- /_targets/meta/meta: -------------------------------------------------------------------------------- 1 | name|type|data|command|depend|seed|path|time|size|bytes|format|repository|iteration|parent|children|seconds|warnings|error 2 | differential_report|stem|ac748f7fa52d5029|23325ca2d8240a93|fb2db82ab7471e72|-1782717259|doc/differential_report.html*doc/differential_report.Rmd|t19261.6766805736s|a0a4f86efbfdcf39|832750|file|local|vector|||3.018|| 3 | differential_test|function|f8946ae245e98fe8||||||||||||||| 4 | exploration|stem|ca71a15e7acdaaaf|18d881e3790d6b93|fcdc111eef27c78a|561864688|doc/exploration.html*doc/exploration.Rmd|t19260.0360040896s|c6e76eb670fd774e|758292|file|local|vector|||2.829|| 5 | exploration_child|stem|564530942adedd07|9a029670a9257ceb|ef46db3751d8e999|-1477841786|doc/exploration_child.Rmd|t19261.6716795792s|917836ac7f937548|3006|file|local|vector|||0.001|| 6 | impute_missing|function|906611cca0c2ec97||||||||||||||| 7 | lipid_imputed|stem|4548dac002a3522f|e025250d4c2cbf29|fe35e1e851a168a8|853002156||t19261.0280151864s|76d9062ac31b85de|96588|rds|local|vector|||0.05|| 8 | lipid_measurements|stem|8148a2f47c80ee99|ef263805ee8772bb|a703d2d52fb27f67|1244605217||t19260.029634172s|aeb46e3b873e264e|99658|rds|local|vector|||0.305|| 9 | lipid_metadata|stem|d4904dbee2417a04|285097f1528c7ea8|4325827ac526c392|2109166249||t19260.029635098s|4049cc3588719995|961|rds|local|vector|||0.07|| 10 | lipid_normalized|stem|a273ccbdcfb4c3b1|6124dc9da6ba3b9c|bfb6343e081f2bea|-145359878||t19261.0164594336s|521873b020564515|96566|rds|local|vector|||0.449|| 11 | lipids_differential|stem|c9bd4bb89f77a201|037d52bb327e9613|49d497dfc4969e6a|1494841232||t19261.672954342s|66a8f5b68bc5f161|51417|rds|local|vector|||0.204|| 12 | measurement_file|stem|c866b0f525c34983|502f40d5f4d54997|ef46db3751d8e999|-1919924667|data/sample_measurements.csv|t19210.6866851119s|365b8c2ccc391959|280789|file|local|vector|||0.001|| 13 | metadata_file|stem|ff6e0749e563363e|fc73ab2b21a3ff56|ef46db3751d8e999|-657399450|data/sample_metadata.csv|t19210.6848230273s|ed33f06d1821bcea|2460|file|local|vector|||0.001|| 14 | normalize_samples|function|f2d53b480a50f69b||||||||||||||| 15 | -------------------------------------------------------------------------------- /data/sample_metadata.csv: -------------------------------------------------------------------------------- 1 | "client_identifier","parent_sample_name","assay","cell_line","client_matrix","client_sample_id","client_sample_number","group_number","sample_amount","sample_amount_units","sample_box_location","sample_description","amount_extracted_clp","amount_method1","amount_method2","bradford_clp_mg_ml","group_units","sample_id" 2 | 1,"FAKE-08656","CLP","fake cancer cell line","CELL PELLET","FAKE WT-1",1,1,150,"uL","A2","FAKE human cancer cell pellet in 1.5 ml safe lock tube",75,75,75,25.771,"WT","WT_1" 3 | 2,"FAKE-56152","CLP","fake cancer cell line","CELL PELLET","FAKE WT-2",2,1,150,"uL","A4","FAKE human cancer cell pellet in 1.5 ml safe lock tube",75,75,75,30.662,"WT","WT_2" 4 | 3,"FAKE-50737","CLP","fake cancer cell line","CELL PELLET","FAKE WT-3",3,1,150,"uL","A6","FAKE human cancer cell pellet in 1.5 ml safe lock tube",75,75,75,25.494,"WT","WT_3" 5 | 4,"FAKE-24627","CLP","fake cancer cell line","CELL PELLET","FAKE WT-4",4,1,150,"uL","A8","FAKE human cancer cell pellet in 1.5 ml safe lock tube",75,75,75,34.965,"WT","WT_4" 6 | 5,"FAKE-21744","CLP","fake cancer cell line","CELL PELLET","FAKE WT-5",5,1,150,"uL","C2","FAKE human cancer cell pellet in 1.5 ml safe lock tube",75,75,75,22.855,"WT","WT_5" 7 | 6,"FAKE-01158","CLP","fake cancer cell line","CELL PELLET","FAKE WT-6",6,1,150,"uL","C4","FAKE human cancer cell pellet in 1.5 ml safe lock tube",75,75,75,28.118,"WT","WT_6" 8 | 7,"FAKE-45597","CLP","fake cancer cell line","CELL PELLET","FAKE KO-1",7,2,150,"uL","C6","FAKE gene KO human cancer cell pellet in 1.5 ml safe lock tube",75,75,75,33.985,"KO","KO_1" 9 | 8,"FAKE-85509","CLP","fake cancer cell line","CELL PELLET","FAKE KO-2",8,2,150,"uL","C8","FAKE gene KO human cancer cell pellet in 1.5 ml safe lock tube",75,75,75,27.389,"KO","KO_2" 10 | 9,"FAKE-11955","CLP","fake cancer cell line","CELL PELLET","FAKE KO-3",9,2,150,"uL","E2","FAKE gene KO human cancer cell pellet in 1.5 ml safe lock tube",75,75,75,32.913,"KO","KO_3" 11 | 10,"FAKE-11286","CLP","fake cancer cell line","CELL PELLET","FAKE KO-4",10,2,150,"uL","E4","FAKE gene KO human cancer cell pellet in 1.5 ml safe lock tube",75,75,75,31.23,"KO","KO_4" 12 | 11,"FAKE-54669","CLP","fake cancer cell line","CELL PELLET","FAKE KO-5",11,2,150,"uL","E6","FAKE gene KO human cancer cell pellet in 1.5 ml safe lock tube",75,75,75,25.058,"KO","KO_5" 13 | 12,"FAKE-54782","CLP","fake cancer cell line","CELL PELLET","FAKE KO-6",12,2,150,"uL","E8","FAKE gene KO human cancer cell pellet in 1.5 ml safe lock tube",75,75,75,30.374,"KO","KO_6" 14 | -------------------------------------------------------------------------------- /dependency_network.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rmflight/example_targets_workflow/8016b73435655f29c14ca7401ea92a5ef387771d/dependency_network.png -------------------------------------------------------------------------------- /doc/differential_report.Rmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Differential Report" 3 | author: "Robert M Flight" 4 | date: "`r format(Sys.time(), '%d %B, %Y')`" 5 | output: html_document 6 | --- 7 | 8 | ```{r setup, include = FALSE} 9 | knitr::opts_chunk$set(warning = FALSE, 10 | message = FALSE, 11 | fig.width = 8, 12 | fig.height = 5, 13 | fig.dpi = 600) 14 | ## target knits Rmds in their own session, so load libraries here. 15 | source(here::here("packages.R")) 16 | ## if you want access to the functions you've written 17 | lapply(list.files(here::here("./R"), full.names = TRUE), source) 18 | ``` 19 | 20 | ```{r load-targets} 21 | tar_load(c(lipid_measurements, 22 | lipid_metadata)) 23 | 24 | tar_load(c(exploration, 25 | exploration_child, 26 | lipids_differential)) 27 | 28 | ``` 29 | 30 | ## Purpose 31 | 32 | Do some analysis on our lipidomics data. 33 | 34 | ## Data 35 | 36 | Data is lipidomics data from a wild-type (WT) tissue and then same tissue after introducing a gene knock-out (KO, removing the gene from the genome). 37 | 38 | ```{r eda, child='doc/exploration_child.Rmd'} 39 | 40 | ``` 41 | 42 | ### Differential Analysis 43 | 44 | Using `limma`, we did a differential analysis of KO / WT. 45 | 46 | ```{r} 47 | #| label: figure_of_ko_wt 48 | #| fig.cap: "Volcano plot of KO / WT of lipidomics data. Most things are significant because they are actually technical and not biological replicates." 49 | sig_cut = 0.05 50 | lipids_differential = lipids_differential |> 51 | dplyr::mutate(log_p = -1 * log10(adj.P.Val), 52 | sig = adj.P.Val <= sig_cut) 53 | lipids_differential |> 54 | ggplot(aes(x = logFC, y = log_p, color = sig)) + 55 | geom_point() + 56 | theme(legend.position = c(0.1, 0.1)) 57 | ``` -------------------------------------------------------------------------------- /doc/exploration.Rmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Exploratory Data Analysis" 3 | author: "Robert M Flight" 4 | date: "`r format(Sys.time(), '%d %B, %Y')`" 5 | output: html_document 6 | editor_options: 7 | chunk_output_type: console 8 | --- 9 | 10 | ```{r setup} 11 | knitr::opts_chunk$set(warning = FALSE, 12 | message = FALSE, 13 | fig.width = 8, 14 | fig.height = 5, 15 | fig.dpi = 600) 16 | ## target knits Rmds in their own session, so load libraries here. 17 | source(here::here("packages.R")) 18 | ## if you want access to the functions you've written 19 | lapply(list.files(here::here("./R"), full.names = TRUE), source) 20 | ``` 21 | 22 | 23 | ## Purpose 24 | 25 | Do some exploratory data analysis (EDA) and quality control quality assessment on our lipidomics data. 26 | 27 | ## Data 28 | 29 | Data is lipidomics data from a wild-type (WT) tissue and then same tissue after introducing a gene knock-out (KO, removing the gene from the genome). 30 | 31 | ## Exploratory Data Analysis 32 | 33 | Our exploratory data analysis (EDA) is aimed at making sure that there really are just two main classes of samples, WT and KO, and checking for any outliers that should be removed prior to differential analysis of lipids, where we do a ebayes adjusted t-test of lipid abundance associated with genotype. 34 | 35 | ## Load Data 36 | 37 | ```{r load_data} 38 | tar_load(lipid_measurements) 39 | tar_load(lipid_metadata) 40 | ``` 41 | 42 | ```{r peak_data} 43 | head(lipid_measurements) 44 | head(lipid_metadata) 45 | ``` 46 | 47 | ## Sample Sample Correlations 48 | 49 | ```{r sample_sample_correlation} 50 | measurements_matrix = lipid_measurements %>% 51 | select(all_of(lipid_metadata$sample_id)) %>% 52 | as.matrix() 53 | 54 | # use transpose to keep it by samples and not lipid features 55 | lipid_cor = ici_kendalltau(t(measurements_matrix)) 56 | ``` 57 | 58 | ```{r visualize_cor, fig.width = 8, fig.height = 7.5} 59 | lipid_cor_cor = lipid_cor$cor[lipid_metadata$sample_id, lipid_metadata$sample_id] 60 | lipid_metadata_df = as.data.frame(lipid_metadata) 61 | rownames(lipid_metadata_df) = lipid_metadata_df$sample_id 62 | lipid_metadata_df$group = lipid_metadata_df$group_units 63 | lipid_cor_order = visualizationQualityControl::similarity_reorderbyclass(lipid_cor_cor, sample_classes = lipid_metadata_df[, "group", drop = FALSE], transform = "sub_1") 64 | 65 | wt_ko_colors = ggplot2::scale_color_discrete()$palette(2) 66 | names(wt_ko_colors) = c("KO", "WT") 67 | 68 | lipid_colors = list(group = wt_ko_colors) 69 | 70 | n_break = 20 71 | lipid_map_colors = circlize::colorRamp2(seq(0.8, 72 | 1, 73 | length.out = n_break), 74 | viridis::viridis(n_break)) 75 | 76 | lipid_row_annot = HeatmapAnnotation(df = as.data.frame(lipid_metadata_df[lipid_cor_order$indices, c("group"), drop = FALSE]), 77 | col = lipid_colors, which = "row", 78 | show_annotation_name = FALSE) 79 | lipid_column_annot = HeatmapAnnotation(df = as.data.frame(lipid_metadata_df[lipid_cor_order$indices, c("group"), drop = FALSE]), 80 | col = lipid_colors, which = "column", 81 | show_annotation_name = FALSE, 82 | show_legend = FALSE) 83 | 84 | Heatmap(lipid_cor_cor[lipid_cor_order$indices, lipid_cor_order$indices], 85 | col = lipid_map_colors, 86 | name = "ICI-Kt", 87 | cluster_rows = FALSE, 88 | cluster_columns = FALSE, 89 | right_annotation = lipid_row_annot, 90 | bottom_annotation = lipid_column_annot) 91 | 92 | ``` 93 | 94 | ## Sample Principal Component Analysis 95 | 96 | ```{r pca} 97 | lipid_zero_matrix = measurements_matrix 98 | lipid_zero_matrix[is.na(measurements_matrix)] = 0 99 | 100 | lipid_log_matrix = log1p(lipid_zero_matrix) 101 | lipid_pca = prcomp(t(lipid_log_matrix), center = TRUE, scale. = FALSE) 102 | 103 | lipid_pca_scores = bind_cols(lipid_pca$x, lipid_metadata_df[, c("group", "sample_id")]) 104 | pca_var = visqc_score_contributions(lipid_pca$x) 105 | 106 | lipid_pca_scores %>% 107 | ggplot(aes(x = PC1, y = PC2, color = group)) + 108 | geom_point(size = 3) + 109 | labs(x = pca_var$labels[1], 110 | y = pca_var$labels[2]) + 111 | theme(legend.position = c(0.75, 0.9)) 112 | ``` -------------------------------------------------------------------------------- /doc/exploration_child.Rmd: -------------------------------------------------------------------------------- 1 | 2 | 3 | ### Exploratory Data Analysis 4 | 5 | Our exploratory data analysis (EDA) is aimed at making sure that there really are just two main classes of samples, WT and KO, and checking for any outliers that should be removed prior to differential analysis of lipids, where we do a ebayes adjusted t-test of lipid abundance associated with genotype. 6 | 7 | 8 | ```{r peak_data} 9 | head(lipid_measurements) 10 | head(lipid_metadata) 11 | ``` 12 | 13 | #### Sample Sample Correlations 14 | 15 | ```{r sample_sample_correlation} 16 | measurements_matrix = lipid_measurements %>% 17 | select(all_of(lipid_metadata$sample_id)) %>% 18 | as.matrix() 19 | 20 | # use transpose to keep it by samples and not lipid features 21 | lipid_cor = ici_kendalltau(t(measurements_matrix)) 22 | ``` 23 | 24 | ```{r visualize_cor, fig.width = 8, fig.height = 7.5} 25 | lipid_cor_cor = lipid_cor$cor[lipid_metadata$sample_id, lipid_metadata$sample_id] 26 | lipid_metadata_df = as.data.frame(lipid_metadata) 27 | rownames(lipid_metadata_df) = lipid_metadata_df$sample_id 28 | lipid_metadata_df$group = lipid_metadata_df$group_units 29 | lipid_cor_order = visualizationQualityControl::similarity_reorderbyclass(lipid_cor_cor, sample_classes = lipid_metadata_df[, "group", drop = FALSE], transform = "sub_1") 30 | 31 | wt_ko_colors = ggplot2::scale_color_discrete()$palette(2) 32 | names(wt_ko_colors) = c("KO", "WT") 33 | 34 | lipid_colors = list(group = wt_ko_colors) 35 | 36 | n_break = 20 37 | lipid_map_colors = circlize::colorRamp2(seq(0.8, 38 | 1, 39 | length.out = n_break), 40 | viridis::viridis(n_break)) 41 | 42 | lipid_row_annot = HeatmapAnnotation(df = as.data.frame(lipid_metadata_df[lipid_cor_order$indices, c("group"), drop = FALSE]), 43 | col = lipid_colors, which = "row", 44 | show_annotation_name = FALSE) 45 | lipid_column_annot = HeatmapAnnotation(df = as.data.frame(lipid_metadata_df[lipid_cor_order$indices, c("group"), drop = FALSE]), 46 | col = lipid_colors, which = "column", 47 | show_annotation_name = FALSE, 48 | show_legend = FALSE) 49 | 50 | Heatmap(lipid_cor_cor[lipid_cor_order$indices, lipid_cor_order$indices], 51 | col = lipid_map_colors, 52 | name = "ICI-Kt", 53 | cluster_rows = FALSE, 54 | cluster_columns = FALSE, 55 | right_annotation = lipid_row_annot, 56 | bottom_annotation = lipid_column_annot) 57 | 58 | ``` 59 | 60 | #### Sample Principal Component Analysis 61 | 62 | ```{r pca} 63 | lipid_zero_matrix = measurements_matrix 64 | lipid_zero_matrix[is.na(measurements_matrix)] = 0 65 | 66 | lipid_log_matrix = log1p(lipid_zero_matrix) 67 | lipid_pca = prcomp(t(lipid_log_matrix), center = TRUE, scale. = FALSE) 68 | 69 | lipid_pca_scores = bind_cols(lipid_pca$x, lipid_metadata_df[, c("group", "sample_id")]) 70 | pca_var = visqc_score_contributions(lipid_pca$x) 71 | 72 | lipid_pca_scores %>% 73 | ggplot(aes(x = PC1, y = PC2, color = group)) + 74 | geom_point(size = 3) + 75 | labs(x = pca_var$labels[1], 76 | y = pca_var$labels[2]) + 77 | theme(legend.position = c(0.75, 0.9)) 78 | ``` -------------------------------------------------------------------------------- /packages.R: -------------------------------------------------------------------------------- 1 | ## library() calls go here 2 | library(conflicted) 3 | library(dotenv) 4 | library(targets) 5 | library(tarchetypes) 6 | library(visualizationQualityControl) 7 | library(ggplot2) 8 | library(ICIKendallTau) 9 | library(rmarkdown) 10 | library(dplyr) 11 | suppressPackageStartupMessages(library(ComplexHeatmap)) 12 | theme_set(cowplot::theme_cowplot()) 13 | -------------------------------------------------------------------------------- /renv.lock: -------------------------------------------------------------------------------- 1 | { 2 | "R": { 3 | "Version": "4.3.0", 4 | "Repositories": [ 5 | { 6 | "Name": "BioCsoft", 7 | "URL": "https://bioconductor.org/packages/3.17/bioc" 8 | }, 9 | { 10 | "Name": "BioCann", 11 | "URL": "https://bioconductor.org/packages/3.17/data/annotation" 12 | }, 13 | { 14 | "Name": "BioCexp", 15 | "URL": "https://bioconductor.org/packages/3.17/data/experiment" 16 | }, 17 | { 18 | "Name": "BioCworkflows", 19 | "URL": "https://bioconductor.org/packages/3.17/workflows" 20 | }, 21 | { 22 | "Name": "BioCbooks", 23 | "URL": "https://bioconductor.org/packages/3.17/books" 24 | }, 25 | { 26 | "Name": "CRAN", 27 | "URL": "https://cloud.r-project.org" 28 | } 29 | ] 30 | }, 31 | "Bioconductor": { 32 | "Version": "3.17" 33 | }, 34 | "Packages": { 35 | "BiocGenerics": { 36 | "Package": "BiocGenerics", 37 | "Version": "0.46.0", 38 | "Source": "Bioconductor", 39 | "git_url": "https://git.bioconductor.org/packages/BiocGenerics", 40 | "git_branch": "RELEASE_3_17", 41 | "git_last_commit": "a90f0c5", 42 | "git_last_commit_date": "2023-04-25", 43 | "Requirements": [ 44 | "R", 45 | "graphics", 46 | "methods", 47 | "stats", 48 | "utils" 49 | ], 50 | "Hash": "c179ae59955c36f5d0068ed29ce832f7" 51 | }, 52 | "BiocManager": { 53 | "Package": "BiocManager", 54 | "Version": "1.30.21", 55 | "Source": "Repository", 56 | "Repository": "CRAN", 57 | "Requirements": [ 58 | "utils" 59 | ], 60 | "Hash": "be203e7eea75514bc1a41c1de39a9bb9" 61 | }, 62 | "ComplexHeatmap": { 63 | "Package": "ComplexHeatmap", 64 | "Version": "2.16.0", 65 | "Source": "Bioconductor", 66 | "git_url": "https://git.bioconductor.org/packages/ComplexHeatmap", 67 | "git_branch": "RELEASE_3_17", 68 | "git_last_commit": "01eb55c", 69 | "git_last_commit_date": "2023-04-25", 70 | "Requirements": [ 71 | "GetoptLong", 72 | "GlobalOptions", 73 | "IRanges", 74 | "R", 75 | "RColorBrewer", 76 | "circlize", 77 | "clue", 78 | "codetools", 79 | "colorspace", 80 | "digest", 81 | "doParallel", 82 | "foreach", 83 | "grDevices", 84 | "graphics", 85 | "grid", 86 | "matrixStats", 87 | "methods", 88 | "png", 89 | "stats" 90 | ], 91 | "Hash": "e40659423f418fdb232649155f3cfac1" 92 | }, 93 | "GetoptLong": { 94 | "Package": "GetoptLong", 95 | "Version": "1.0.5", 96 | "Source": "Repository", 97 | "Repository": "CRAN", 98 | "Requirements": [ 99 | "GlobalOptions", 100 | "R", 101 | "crayon", 102 | "methods", 103 | "rjson" 104 | ], 105 | "Hash": "61fac01c73abf03ac72e88dc3952c1e3" 106 | }, 107 | "GlobalOptions": { 108 | "Package": "GlobalOptions", 109 | "Version": "0.1.2", 110 | "Source": "Repository", 111 | "Repository": "CRAN", 112 | "Requirements": [ 113 | "R", 114 | "methods", 115 | "utils" 116 | ], 117 | "Hash": "c3f7b221e60c28f5f3533d74c6fef024" 118 | }, 119 | "ICIKendallTau": { 120 | "Package": "ICIKendallTau", 121 | "Version": "0.2.5", 122 | "Source": "GitHub", 123 | "RemoteType": "github", 124 | "RemoteHost": "api.github.com", 125 | "RemoteUsername": "moseleybioinformaticslab", 126 | "RemoteRepo": "icikendalltau", 127 | "RemoteRef": "main", 128 | "RemoteSha": "3da7de6f24b2fadd0ca796d880de45a1af006a69", 129 | "Requirements": [ 130 | "Rcpp", 131 | "purrr", 132 | "utils" 133 | ], 134 | "Hash": "9785085db209a2484540cead42548238" 135 | }, 136 | "IRanges": { 137 | "Package": "IRanges", 138 | "Version": "2.34.1", 139 | "Source": "Bioconductor", 140 | "git_url": "https://git.bioconductor.org/packages/IRanges", 141 | "git_branch": "RELEASE_3_17", 142 | "git_last_commit": "ce72113", 143 | "git_last_commit_date": "2023-06-21", 144 | "Requirements": [ 145 | "BiocGenerics", 146 | "R", 147 | "S4Vectors", 148 | "methods", 149 | "stats", 150 | "stats4", 151 | "utils" 152 | ], 153 | "Hash": "18939552437a335b59fb381e508275d6" 154 | }, 155 | "MASS": { 156 | "Package": "MASS", 157 | "Version": "7.3-60", 158 | "Source": "Repository", 159 | "Repository": "CRAN", 160 | "Requirements": [ 161 | "R", 162 | "grDevices", 163 | "graphics", 164 | "methods", 165 | "stats", 166 | "utils" 167 | ], 168 | "Hash": "a56a6365b3fa73293ea8d084be0d9bb0" 169 | }, 170 | "Matrix": { 171 | "Package": "Matrix", 172 | "Version": "1.5-4.1", 173 | "Source": "Repository", 174 | "Repository": "CRAN", 175 | "Requirements": [ 176 | "R", 177 | "graphics", 178 | "grid", 179 | "lattice", 180 | "methods", 181 | "stats", 182 | "utils" 183 | ], 184 | "Hash": "38082d362d317745fb932e13956dccbb" 185 | }, 186 | "R.methodsS3": { 187 | "Package": "R.methodsS3", 188 | "Version": "1.8.2", 189 | "Source": "Repository", 190 | "Repository": "CRAN", 191 | "Requirements": [ 192 | "R", 193 | "utils" 194 | ], 195 | "Hash": "278c286fd6e9e75d0c2e8f731ea445c8" 196 | }, 197 | "R.oo": { 198 | "Package": "R.oo", 199 | "Version": "1.25.0", 200 | "Source": "Repository", 201 | "Repository": "CRAN", 202 | "Requirements": [ 203 | "R", 204 | "R.methodsS3", 205 | "methods", 206 | "utils" 207 | ], 208 | "Hash": "a0900a114f4f0194cf4aa8cd4a700681" 209 | }, 210 | "R6": { 211 | "Package": "R6", 212 | "Version": "2.5.1", 213 | "Source": "Repository", 214 | "Repository": "CRAN", 215 | "Requirements": [ 216 | "R" 217 | ], 218 | "Hash": "470851b6d5d0ac559e9d01bb352b4021" 219 | }, 220 | "RColorBrewer": { 221 | "Package": "RColorBrewer", 222 | "Version": "1.1-3", 223 | "Source": "Repository", 224 | "Repository": "CRAN", 225 | "Requirements": [ 226 | "R" 227 | ], 228 | "Hash": "45f0398006e83a5b10b72a90663d8d8c" 229 | }, 230 | "Rcpp": { 231 | "Package": "Rcpp", 232 | "Version": "1.0.10", 233 | "Source": "Repository", 234 | "Repository": "CRAN", 235 | "Requirements": [ 236 | "methods", 237 | "utils" 238 | ], 239 | "Hash": "e749cae40fa9ef469b6050959517453c" 240 | }, 241 | "S4Vectors": { 242 | "Package": "S4Vectors", 243 | "Version": "0.38.1", 244 | "Source": "Bioconductor", 245 | "git_url": "https://git.bioconductor.org/packages/S4Vectors", 246 | "git_branch": "RELEASE_3_17", 247 | "git_last_commit": "17a9d8c", 248 | "git_last_commit_date": "2023-05-01", 249 | "Requirements": [ 250 | "BiocGenerics", 251 | "R", 252 | "methods", 253 | "stats", 254 | "stats4", 255 | "utils" 256 | ], 257 | "Hash": "f0a46e23a2a7d6aa27e945faf7f242c7" 258 | }, 259 | "backports": { 260 | "Package": "backports", 261 | "Version": "1.4.1", 262 | "Source": "Repository", 263 | "Repository": "CRAN", 264 | "Requirements": [ 265 | "R" 266 | ], 267 | "Hash": "c39fbec8a30d23e721980b8afb31984c" 268 | }, 269 | "base64enc": { 270 | "Package": "base64enc", 271 | "Version": "0.1-3", 272 | "Source": "Repository", 273 | "Repository": "CRAN", 274 | "Requirements": [ 275 | "R" 276 | ], 277 | "Hash": "543776ae6848fde2f48ff3816d0628bc" 278 | }, 279 | "base64url": { 280 | "Package": "base64url", 281 | "Version": "1.4", 282 | "Source": "Repository", 283 | "Repository": "CRAN", 284 | "Requirements": [ 285 | "backports" 286 | ], 287 | "Hash": "0c54cf3a08cc0e550fbd64ad33166143" 288 | }, 289 | "bit": { 290 | "Package": "bit", 291 | "Version": "4.0.5", 292 | "Source": "Repository", 293 | "Repository": "CRAN", 294 | "Requirements": [ 295 | "R" 296 | ], 297 | "Hash": "d242abec29412ce988848d0294b208fd" 298 | }, 299 | "bit64": { 300 | "Package": "bit64", 301 | "Version": "4.0.5", 302 | "Source": "Repository", 303 | "Repository": "CRAN", 304 | "Requirements": [ 305 | "R", 306 | "bit", 307 | "methods", 308 | "stats", 309 | "utils" 310 | ], 311 | "Hash": "9fe98599ca456d6552421db0d6772d8f" 312 | }, 313 | "broom": { 314 | "Package": "broom", 315 | "Version": "1.0.5", 316 | "Source": "Repository", 317 | "Repository": "CRAN", 318 | "Requirements": [ 319 | "R", 320 | "backports", 321 | "dplyr", 322 | "ellipsis", 323 | "generics", 324 | "glue", 325 | "lifecycle", 326 | "purrr", 327 | "rlang", 328 | "stringr", 329 | "tibble", 330 | "tidyr" 331 | ], 332 | "Hash": "fd25391c3c4f6ecf0fa95f1e6d15378c" 333 | }, 334 | "bslib": { 335 | "Package": "bslib", 336 | "Version": "0.4.2", 337 | "Source": "Repository", 338 | "Repository": "CRAN", 339 | "Requirements": [ 340 | "R", 341 | "base64enc", 342 | "cachem", 343 | "grDevices", 344 | "htmltools", 345 | "jquerylib", 346 | "jsonlite", 347 | "memoise", 348 | "mime", 349 | "rlang", 350 | "sass" 351 | ], 352 | "Hash": "a7fbf03946ad741129dc81098722fca1" 353 | }, 354 | "cachem": { 355 | "Package": "cachem", 356 | "Version": "1.0.8", 357 | "Source": "Repository", 358 | "Repository": "CRAN", 359 | "Requirements": [ 360 | "fastmap", 361 | "rlang" 362 | ], 363 | "Hash": "c35768291560ce302c0a6589f92e837d" 364 | }, 365 | "circlize": { 366 | "Package": "circlize", 367 | "Version": "0.4.15", 368 | "Source": "Repository", 369 | "Repository": "CRAN", 370 | "Requirements": [ 371 | "GlobalOptions", 372 | "R", 373 | "colorspace", 374 | "grDevices", 375 | "graphics", 376 | "grid", 377 | "methods", 378 | "shape", 379 | "stats", 380 | "utils" 381 | ], 382 | "Hash": "2bb47a2fe6ab009b1dcc5566d8c3a988" 383 | }, 384 | "cli": { 385 | "Package": "cli", 386 | "Version": "3.6.1", 387 | "Source": "Repository", 388 | "Repository": "CRAN", 389 | "Requirements": [ 390 | "R", 391 | "utils" 392 | ], 393 | "Hash": "89e6d8219950eac806ae0c489052048a" 394 | }, 395 | "codetools": { 396 | "Package": "codetools", 397 | "Version": "0.2-19", 398 | "Source": "Repository", 399 | "Repository": "CRAN", 400 | "Requirements": [ 401 | "R" 402 | ], 403 | "Hash": "c089a619a7fae175d149d89164f8c7d8" 404 | }, 405 | "colorspace": { 406 | "Package": "colorspace", 407 | "Version": "2.1-0", 408 | "Source": "Repository", 409 | "Repository": "CRAN", 410 | "Requirements": [ 411 | "R", 412 | "grDevices", 413 | "graphics", 414 | "methods", 415 | "stats" 416 | ], 417 | "Hash": "f20c47fd52fae58b4e377c37bb8c335b" 418 | }, 419 | "conflicted": { 420 | "Package": "conflicted", 421 | "Version": "1.2.0", 422 | "Source": "Repository", 423 | "Repository": "CRAN", 424 | "Requirements": [ 425 | "R", 426 | "cli", 427 | "memoise", 428 | "rlang" 429 | ], 430 | "Hash": "bb097fccb22d156624fd07cd2894ddb6" 431 | }, 432 | "cowplot": { 433 | "Package": "cowplot", 434 | "Version": "1.1.1", 435 | "Source": "Repository", 436 | "Repository": "CRAN", 437 | "Requirements": [ 438 | "R", 439 | "ggplot2", 440 | "grDevices", 441 | "grid", 442 | "gtable", 443 | "methods", 444 | "rlang", 445 | "scales" 446 | ], 447 | "Hash": "b418e8423699d11c7f2087c2bfd07da2" 448 | }, 449 | "data.table": { 450 | "Package": "data.table", 451 | "Version": "1.14.8", 452 | "Source": "Repository", 453 | "Repository": "CRAN", 454 | "Requirements": [ 455 | "R", 456 | "methods" 457 | ], 458 | "Hash": "b4c06e554f33344e044ccd7fdca750a9" 459 | }, 460 | "dendsort": { 461 | "Package": "dendsort", 462 | "Version": "0.3.4", 463 | "Source": "Repository", 464 | "Repository": "CRAN", 465 | "Hash": "348b0cb68eb90e8896fb78a506399c7f" 466 | }, 467 | "digest": { 468 | "Package": "digest", 469 | "Version": "0.6.31", 470 | "Source": "Repository", 471 | "Repository": "CRAN", 472 | "Requirements": [ 473 | "R", 474 | "utils" 475 | ], 476 | "Hash": "8b708f296afd9ae69f450f9640be8990" 477 | }, 478 | "dotenv": { 479 | "Package": "dotenv", 480 | "Version": "1.0.3", 481 | "Source": "Repository", 482 | "Repository": "CRAN", 483 | "Hash": "7e1213a65b6190437c644a14ec814ef3" 484 | }, 485 | "dplyr": { 486 | "Package": "dplyr", 487 | "Version": "1.1.2", 488 | "Source": "Repository", 489 | "Repository": "CRAN", 490 | "Requirements": [ 491 | "R", 492 | "R6", 493 | "cli", 494 | "generics", 495 | "glue", 496 | "lifecycle", 497 | "magrittr", 498 | "methods", 499 | "pillar", 500 | "rlang", 501 | "tibble", 502 | "tidyselect", 503 | "utils", 504 | "vctrs" 505 | ], 506 | "Hash": "dea6970ff715ca541c387de363ff405e" 507 | }, 508 | "ellipsis": { 509 | "Package": "ellipsis", 510 | "Version": "0.3.2", 511 | "Source": "Repository", 512 | "Repository": "CRAN", 513 | "Requirements": [ 514 | "R", 515 | "rlang" 516 | ], 517 | "Hash": "bb0eec2fe32e88d9e2836c2f73ea2077" 518 | }, 519 | "evaluate": { 520 | "Package": "evaluate", 521 | "Version": "0.21", 522 | "Source": "Repository", 523 | "Repository": "CRAN", 524 | "Requirements": [ 525 | "R", 526 | "methods" 527 | ], 528 | "Hash": "d59f3b464e8da1aef82dc04b588b8dfb" 529 | }, 530 | "fansi": { 531 | "Package": "fansi", 532 | "Version": "1.0.4", 533 | "Source": "Repository", 534 | "Repository": "CRAN", 535 | "Requirements": [ 536 | "R", 537 | "grDevices", 538 | "utils" 539 | ], 540 | "Hash": "1d9e7ad3c8312a192dea7d3db0274fde" 541 | }, 542 | "farver": { 543 | "Package": "farver", 544 | "Version": "2.1.1", 545 | "Source": "Repository", 546 | "Repository": "CRAN", 547 | "Hash": "8106d78941f34855c440ddb946b8f7a5" 548 | }, 549 | "fastmap": { 550 | "Package": "fastmap", 551 | "Version": "1.1.1", 552 | "Source": "Repository", 553 | "Repository": "CRAN", 554 | "Hash": "f7736a18de97dea803bde0a2daaafb27" 555 | }, 556 | "fontawesome": { 557 | "Package": "fontawesome", 558 | "Version": "0.5.1", 559 | "Source": "Repository", 560 | "Repository": "CRAN", 561 | "Requirements": [ 562 | "R", 563 | "htmltools", 564 | "rlang" 565 | ], 566 | "Hash": "1e22b8cabbad1eae951a75e9f8b52378" 567 | }, 568 | "fs": { 569 | "Package": "fs", 570 | "Version": "1.6.2", 571 | "Source": "Repository", 572 | "Repository": "CRAN", 573 | "Requirements": [ 574 | "R", 575 | "methods" 576 | ], 577 | "Hash": "94af08e0aa9675a16fadbb3aaaa90d2a" 578 | }, 579 | "furrr": { 580 | "Package": "furrr", 581 | "Version": "0.3.1", 582 | "Source": "Repository", 583 | "Repository": "CRAN", 584 | "Requirements": [ 585 | "R", 586 | "future", 587 | "globals", 588 | "lifecycle", 589 | "purrr", 590 | "rlang", 591 | "vctrs" 592 | ], 593 | "Hash": "da7a4c32196cb2262a41dd5a25d486ff" 594 | }, 595 | "future": { 596 | "Package": "future", 597 | "Version": "1.32.0", 598 | "Source": "Repository", 599 | "Repository": "CRAN", 600 | "Requirements": [ 601 | "digest", 602 | "globals", 603 | "listenv", 604 | "parallel", 605 | "parallelly", 606 | "utils" 607 | ], 608 | "Hash": "c68517cf2f78be4ea86e140b8598a4ca" 609 | }, 610 | "future.callr": { 611 | "Package": "future.callr", 612 | "Version": "0.8.1", 613 | "Source": "Repository", 614 | "Repository": "CRAN", 615 | "Requirements": [ 616 | "R", 617 | "callr", 618 | "future" 619 | ], 620 | "Hash": "e76426c4a99a1798a9376c6fe9070a68" 621 | }, 622 | "generics": { 623 | "Package": "generics", 624 | "Version": "0.1.3", 625 | "Source": "Repository", 626 | "Repository": "CRAN", 627 | "Requirements": [ 628 | "R", 629 | "methods" 630 | ], 631 | "Hash": "15e9634c0fcd294799e9b2e929ed1b86" 632 | }, 633 | "ggplot2": { 634 | "Package": "ggplot2", 635 | "Version": "3.4.2", 636 | "Source": "Repository", 637 | "Repository": "CRAN", 638 | "Requirements": [ 639 | "MASS", 640 | "R", 641 | "cli", 642 | "glue", 643 | "grDevices", 644 | "grid", 645 | "gtable", 646 | "isoband", 647 | "lifecycle", 648 | "mgcv", 649 | "rlang", 650 | "scales", 651 | "stats", 652 | "tibble", 653 | "vctrs", 654 | "withr" 655 | ], 656 | "Hash": "3a147ee02e85a8941aad9909f1b43b7b" 657 | }, 658 | "git2r": { 659 | "Package": "git2r", 660 | "Version": "0.32.0", 661 | "Source": "Repository", 662 | "Repository": "CRAN", 663 | "Requirements": [ 664 | "R", 665 | "graphics", 666 | "utils" 667 | ], 668 | "Hash": "1882d7a76fd8c14b2322865f74c9a348" 669 | }, 670 | "globals": { 671 | "Package": "globals", 672 | "Version": "0.16.2", 673 | "Source": "Repository", 674 | "Repository": "CRAN", 675 | "Requirements": [ 676 | "R", 677 | "codetools" 678 | ], 679 | "Hash": "baa9585ab4ce47a9f4618e671778cc6f" 680 | }, 681 | "glue": { 682 | "Package": "glue", 683 | "Version": "1.6.2", 684 | "Source": "Repository", 685 | "Repository": "CRAN", 686 | "Requirements": [ 687 | "R", 688 | "methods" 689 | ], 690 | "Hash": "4f2596dfb05dac67b9dc558e5c6fba2e" 691 | }, 692 | "gridExtra": { 693 | "Package": "gridExtra", 694 | "Version": "2.3", 695 | "Source": "Repository", 696 | "Repository": "CRAN", 697 | "Requirements": [ 698 | "grDevices", 699 | "graphics", 700 | "grid", 701 | "gtable", 702 | "utils" 703 | ], 704 | "Hash": "7d7f283939f563670a697165b2cf5560" 705 | }, 706 | "gtable": { 707 | "Package": "gtable", 708 | "Version": "0.3.3", 709 | "Source": "Repository", 710 | "Repository": "CRAN", 711 | "Requirements": [ 712 | "R", 713 | "cli", 714 | "glue", 715 | "grid", 716 | "lifecycle", 717 | "rlang" 718 | ], 719 | "Hash": "b44addadb528a0d227794121c00572a0" 720 | }, 721 | "here": { 722 | "Package": "here", 723 | "Version": "1.0.1", 724 | "Source": "Repository", 725 | "Repository": "CRAN", 726 | "Requirements": [ 727 | "rprojroot" 728 | ], 729 | "Hash": "24b224366f9c2e7534d2344d10d59211" 730 | }, 731 | "highr": { 732 | "Package": "highr", 733 | "Version": "0.10", 734 | "Source": "Repository", 735 | "Repository": "CRAN", 736 | "Requirements": [ 737 | "R", 738 | "xfun" 739 | ], 740 | "Hash": "06230136b2d2b9ba5805e1963fa6e890" 741 | }, 742 | "hms": { 743 | "Package": "hms", 744 | "Version": "1.1.3", 745 | "Source": "Repository", 746 | "Repository": "CRAN", 747 | "Requirements": [ 748 | "lifecycle", 749 | "methods", 750 | "pkgconfig", 751 | "rlang", 752 | "vctrs" 753 | ], 754 | "Hash": "b59377caa7ed00fa41808342002138f9" 755 | }, 756 | "htmltools": { 757 | "Package": "htmltools", 758 | "Version": "0.5.5", 759 | "Source": "Repository", 760 | "Repository": "CRAN", 761 | "Requirements": [ 762 | "R", 763 | "base64enc", 764 | "digest", 765 | "ellipsis", 766 | "fastmap", 767 | "grDevices", 768 | "rlang", 769 | "utils" 770 | ], 771 | "Hash": "ba0240784ad50a62165058a27459304a" 772 | }, 773 | "igraph": { 774 | "Package": "igraph", 775 | "Version": "1.5.0", 776 | "Source": "Repository", 777 | "Repository": "CRAN", 778 | "Requirements": [ 779 | "Matrix", 780 | "R", 781 | "cli", 782 | "cpp11", 783 | "grDevices", 784 | "graphics", 785 | "magrittr", 786 | "methods", 787 | "pkgconfig", 788 | "rlang", 789 | "stats", 790 | "utils" 791 | ], 792 | "Hash": "84818361421d5fc3ff0bf4e669524217" 793 | }, 794 | "isoband": { 795 | "Package": "isoband", 796 | "Version": "0.2.7", 797 | "Source": "Repository", 798 | "Repository": "CRAN", 799 | "Requirements": [ 800 | "grid", 801 | "utils" 802 | ], 803 | "Hash": "0080607b4a1a7b28979aecef976d8bc2" 804 | }, 805 | "jquerylib": { 806 | "Package": "jquerylib", 807 | "Version": "0.1.4", 808 | "Source": "Repository", 809 | "Repository": "CRAN", 810 | "Requirements": [ 811 | "htmltools" 812 | ], 813 | "Hash": "5aab57a3bd297eee1c1d862735972182" 814 | }, 815 | "jsonlite": { 816 | "Package": "jsonlite", 817 | "Version": "1.8.4", 818 | "Source": "Repository", 819 | "Repository": "CRAN", 820 | "Requirements": [ 821 | "methods" 822 | ], 823 | "Hash": "a4269a09a9b865579b2635c77e572374" 824 | }, 825 | "knitr": { 826 | "Package": "knitr", 827 | "Version": "1.43", 828 | "Source": "Repository", 829 | "Repository": "CRAN", 830 | "Requirements": [ 831 | "R", 832 | "evaluate", 833 | "highr", 834 | "methods", 835 | "tools", 836 | "xfun", 837 | "yaml" 838 | ], 839 | "Hash": "9775eb076713f627c07ce41d8199d8f6" 840 | }, 841 | "knitrProgressBar": { 842 | "Package": "knitrProgressBar", 843 | "Version": "1.1.0", 844 | "Source": "Repository", 845 | "Repository": "CRAN", 846 | "Requirements": [ 847 | "R.oo", 848 | "R6" 849 | ], 850 | "Hash": "0eff7cdf2ade50ff15e43bfeb13b92ed" 851 | }, 852 | "labeling": { 853 | "Package": "labeling", 854 | "Version": "0.4.2", 855 | "Source": "Repository", 856 | "Repository": "CRAN", 857 | "Requirements": [ 858 | "graphics", 859 | "stats" 860 | ], 861 | "Hash": "3d5108641f47470611a32d0bdf357a72" 862 | }, 863 | "lattice": { 864 | "Package": "lattice", 865 | "Version": "0.21-8", 866 | "Source": "Repository", 867 | "Repository": "CRAN", 868 | "Requirements": [ 869 | "R", 870 | "grDevices", 871 | "graphics", 872 | "grid", 873 | "stats", 874 | "utils" 875 | ], 876 | "Hash": "0b8a6d63c8770f02a8b5635f3c431e6b" 877 | }, 878 | "lifecycle": { 879 | "Package": "lifecycle", 880 | "Version": "1.0.3", 881 | "Source": "Repository", 882 | "Repository": "CRAN", 883 | "Requirements": [ 884 | "R", 885 | "cli", 886 | "glue", 887 | "rlang" 888 | ], 889 | "Hash": "001cecbeac1cff9301bdc3775ee46a86" 890 | }, 891 | "limma": { 892 | "Package": "limma", 893 | "Version": "3.55.10", 894 | "Source": "Bioconductor", 895 | "git_url": "https://git.bioconductor.org/packages/limma", 896 | "git_branch": "devel", 897 | "git_last_commit": "6a0e8f7", 898 | "git_last_commit_date": "2023-04-21", 899 | "Requirements": [ 900 | "R", 901 | "grDevices", 902 | "graphics", 903 | "methods", 904 | "stats", 905 | "utils" 906 | ], 907 | "Hash": "e14549c1d45def94917a109c6b403c6b" 908 | }, 909 | "listenv": { 910 | "Package": "listenv", 911 | "Version": "0.9.0", 912 | "Source": "Repository", 913 | "Repository": "CRAN", 914 | "Requirements": [ 915 | "R" 916 | ], 917 | "Hash": "4fbd3679ec8ee169ba28d4b1ea7d0e8f" 918 | }, 919 | "magrittr": { 920 | "Package": "magrittr", 921 | "Version": "2.0.3", 922 | "Source": "Repository", 923 | "Repository": "CRAN", 924 | "Requirements": [ 925 | "R" 926 | ], 927 | "Hash": "7ce2733a9826b3aeb1775d56fd305472" 928 | }, 929 | "matrixStats": { 930 | "Package": "matrixStats", 931 | "Version": "1.0.0", 932 | "Source": "Repository", 933 | "Repository": "CRAN", 934 | "Requirements": [ 935 | "R" 936 | ], 937 | "Hash": "9143629fd64335aac6a6250d1c1ed82a" 938 | }, 939 | "memoise": { 940 | "Package": "memoise", 941 | "Version": "2.0.1", 942 | "Source": "Repository", 943 | "Repository": "CRAN", 944 | "Requirements": [ 945 | "cachem", 946 | "rlang" 947 | ], 948 | "Hash": "e2817ccf4a065c5d9d7f2cfbe7c1d78c" 949 | }, 950 | "mgcv": { 951 | "Package": "mgcv", 952 | "Version": "1.8-42", 953 | "Source": "Repository", 954 | "Repository": "CRAN", 955 | "Requirements": [ 956 | "Matrix", 957 | "R", 958 | "graphics", 959 | "methods", 960 | "nlme", 961 | "splines", 962 | "stats", 963 | "utils" 964 | ], 965 | "Hash": "3460beba7ccc8946249ba35327ba902a" 966 | }, 967 | "mime": { 968 | "Package": "mime", 969 | "Version": "0.12", 970 | "Source": "Repository", 971 | "Repository": "CRAN", 972 | "Requirements": [ 973 | "tools" 974 | ], 975 | "Hash": "18e9c28c1d3ca1560ce30658b22ce104" 976 | }, 977 | "munsell": { 978 | "Package": "munsell", 979 | "Version": "0.5.0", 980 | "Source": "Repository", 981 | "Repository": "CRAN", 982 | "Requirements": [ 983 | "colorspace", 984 | "methods" 985 | ], 986 | "Hash": "6dfe8bf774944bd5595785e3229d8771" 987 | }, 988 | "nlme": { 989 | "Package": "nlme", 990 | "Version": "3.1-162", 991 | "Source": "Repository", 992 | "Repository": "CRAN", 993 | "Requirements": [ 994 | "R", 995 | "graphics", 996 | "lattice", 997 | "stats", 998 | "utils" 999 | ], 1000 | "Hash": "0984ce8da8da9ead8643c5cbbb60f83e" 1001 | }, 1002 | "parallelly": { 1003 | "Package": "parallelly", 1004 | "Version": "1.36.0", 1005 | "Source": "Repository", 1006 | "Repository": "CRAN", 1007 | "Requirements": [ 1008 | "parallel", 1009 | "tools", 1010 | "utils" 1011 | ], 1012 | "Hash": "bca377e1c87ec89ebed77bba00635b2e" 1013 | }, 1014 | "pillar": { 1015 | "Package": "pillar", 1016 | "Version": "1.9.0", 1017 | "Source": "Repository", 1018 | "Repository": "CRAN", 1019 | "Requirements": [ 1020 | "cli", 1021 | "fansi", 1022 | "glue", 1023 | "lifecycle", 1024 | "rlang", 1025 | "utf8", 1026 | "utils", 1027 | "vctrs" 1028 | ], 1029 | "Hash": "15da5a8412f317beeee6175fbc76f4bb" 1030 | }, 1031 | "pkgconfig": { 1032 | "Package": "pkgconfig", 1033 | "Version": "2.0.3", 1034 | "Source": "Repository", 1035 | "Repository": "CRAN", 1036 | "Requirements": [ 1037 | "utils" 1038 | ], 1039 | "Hash": "01f28d4278f15c76cddbea05899c5d6f" 1040 | }, 1041 | "progress": { 1042 | "Package": "progress", 1043 | "Version": "1.2.2", 1044 | "Source": "Repository", 1045 | "Repository": "CRAN", 1046 | "Requirements": [ 1047 | "R6", 1048 | "crayon", 1049 | "hms", 1050 | "prettyunits" 1051 | ], 1052 | "Hash": "14dc9f7a3c91ebb14ec5bb9208a07061" 1053 | }, 1054 | "purrr": { 1055 | "Package": "purrr", 1056 | "Version": "1.0.1", 1057 | "Source": "Repository", 1058 | "Repository": "CRAN", 1059 | "Requirements": [ 1060 | "R", 1061 | "cli", 1062 | "lifecycle", 1063 | "magrittr", 1064 | "rlang", 1065 | "vctrs" 1066 | ], 1067 | "Hash": "d71c815267c640f17ddbf7f16144b4bb" 1068 | }, 1069 | "rappdirs": { 1070 | "Package": "rappdirs", 1071 | "Version": "0.3.3", 1072 | "Source": "Repository", 1073 | "Repository": "CRAN", 1074 | "Requirements": [ 1075 | "R" 1076 | ], 1077 | "Hash": "5e3c5dc0b071b21fa128676560dbe94d" 1078 | }, 1079 | "readr": { 1080 | "Package": "readr", 1081 | "Version": "2.1.4", 1082 | "Source": "Repository", 1083 | "Repository": "CRAN", 1084 | "Requirements": [ 1085 | "R", 1086 | "R6", 1087 | "cli", 1088 | "clipr", 1089 | "cpp11", 1090 | "crayon", 1091 | "hms", 1092 | "lifecycle", 1093 | "methods", 1094 | "rlang", 1095 | "tibble", 1096 | "tzdb", 1097 | "utils", 1098 | "vroom" 1099 | ], 1100 | "Hash": "b5047343b3825f37ad9d3b5d89aa1078" 1101 | }, 1102 | "renv": { 1103 | "Package": "renv", 1104 | "Version": "0.17.3-62", 1105 | "Source": "GitHub", 1106 | "RemoteType": "github", 1107 | "RemoteHost": "api.github.com", 1108 | "RemoteRepo": "renv", 1109 | "RemoteUsername": "rstudio", 1110 | "RemoteRef": "HEAD", 1111 | "RemoteSha": "d06da72a68ac4f68b89c361d364a019013ee6bd9", 1112 | "Requirements": [ 1113 | "utils" 1114 | ], 1115 | "Hash": "2a2a84a24efe2a2ced8508a03ece7edf" 1116 | }, 1117 | "rjson": { 1118 | "Package": "rjson", 1119 | "Version": "0.2.21", 1120 | "Source": "Repository", 1121 | "Repository": "CRAN", 1122 | "Requirements": [ 1123 | "R" 1124 | ], 1125 | "Hash": "f9da75e6444e95a1baf8ca24909d63b9" 1126 | }, 1127 | "rlang": { 1128 | "Package": "rlang", 1129 | "Version": "1.1.1", 1130 | "Source": "Repository", 1131 | "Repository": "CRAN", 1132 | "Requirements": [ 1133 | "R", 1134 | "utils" 1135 | ], 1136 | "Hash": "a85c767b55f0bf9b7ad16c6d7baee5bb" 1137 | }, 1138 | "rmarkdown": { 1139 | "Package": "rmarkdown", 1140 | "Version": "2.21", 1141 | "Source": "Repository", 1142 | "Repository": "CRAN", 1143 | "Requirements": [ 1144 | "R", 1145 | "bslib", 1146 | "evaluate", 1147 | "fontawesome", 1148 | "htmltools", 1149 | "jquerylib", 1150 | "jsonlite", 1151 | "knitr", 1152 | "methods", 1153 | "stringr", 1154 | "tinytex", 1155 | "tools", 1156 | "utils", 1157 | "xfun", 1158 | "yaml" 1159 | ], 1160 | "Hash": "493df4ae51e2e984952ea4d5c75786a3" 1161 | }, 1162 | "rprojroot": { 1163 | "Package": "rprojroot", 1164 | "Version": "2.0.3", 1165 | "Source": "Repository", 1166 | "Repository": "CRAN", 1167 | "Requirements": [ 1168 | "R" 1169 | ], 1170 | "Hash": "1de7ab598047a87bba48434ba35d497d" 1171 | }, 1172 | "sass": { 1173 | "Package": "sass", 1174 | "Version": "0.4.6", 1175 | "Source": "Repository", 1176 | "Repository": "CRAN", 1177 | "Requirements": [ 1178 | "R6", 1179 | "fs", 1180 | "htmltools", 1181 | "rappdirs", 1182 | "rlang" 1183 | ], 1184 | "Hash": "cc3ec7dd33982ef56570229b62d6388e" 1185 | }, 1186 | "scales": { 1187 | "Package": "scales", 1188 | "Version": "1.2.1", 1189 | "Source": "Repository", 1190 | "Repository": "CRAN", 1191 | "Requirements": [ 1192 | "R", 1193 | "R6", 1194 | "RColorBrewer", 1195 | "farver", 1196 | "labeling", 1197 | "lifecycle", 1198 | "munsell", 1199 | "rlang", 1200 | "viridisLite" 1201 | ], 1202 | "Hash": "906cb23d2f1c5680b8ce439b44c6fa63" 1203 | }, 1204 | "shape": { 1205 | "Package": "shape", 1206 | "Version": "1.4.6", 1207 | "Source": "Repository", 1208 | "Repository": "CRAN", 1209 | "Requirements": [ 1210 | "R", 1211 | "grDevices", 1212 | "graphics", 1213 | "stats" 1214 | ], 1215 | "Hash": "9067f962730f58b14d8ae54ca885509f" 1216 | }, 1217 | "stringi": { 1218 | "Package": "stringi", 1219 | "Version": "1.7.12", 1220 | "Source": "Repository", 1221 | "Repository": "CRAN", 1222 | "Requirements": [ 1223 | "R", 1224 | "stats", 1225 | "tools", 1226 | "utils" 1227 | ], 1228 | "Hash": "ca8bd84263c77310739d2cf64d84d7c9" 1229 | }, 1230 | "stringr": { 1231 | "Package": "stringr", 1232 | "Version": "1.5.0", 1233 | "Source": "Repository", 1234 | "Repository": "CRAN", 1235 | "Requirements": [ 1236 | "R", 1237 | "cli", 1238 | "glue", 1239 | "lifecycle", 1240 | "magrittr", 1241 | "rlang", 1242 | "stringi", 1243 | "vctrs" 1244 | ], 1245 | "Hash": "671a4d384ae9d32fc47a14e98bfa3dc8" 1246 | }, 1247 | "tarchetypes": { 1248 | "Package": "tarchetypes", 1249 | "Version": "0.7.7", 1250 | "Source": "Repository", 1251 | "Repository": "CRAN", 1252 | "Requirements": [ 1253 | "R", 1254 | "digest", 1255 | "dplyr", 1256 | "fs", 1257 | "furrr", 1258 | "future", 1259 | "future.callr", 1260 | "rlang", 1261 | "targets", 1262 | "tibble", 1263 | "tidyselect", 1264 | "utils", 1265 | "vctrs", 1266 | "withr" 1267 | ], 1268 | "Hash": "60b64e0f5f75bb1860d21145cedf9255" 1269 | }, 1270 | "targets": { 1271 | "Package": "targets", 1272 | "Version": "1.1.3", 1273 | "Source": "Repository", 1274 | "Repository": "CRAN", 1275 | "Requirements": [ 1276 | "R", 1277 | "R6", 1278 | "base64url", 1279 | "callr", 1280 | "cli", 1281 | "codetools", 1282 | "data.table", 1283 | "digest", 1284 | "igraph", 1285 | "knitr", 1286 | "rlang", 1287 | "stats", 1288 | "tibble", 1289 | "tidyselect", 1290 | "tools", 1291 | "utils", 1292 | "vctrs", 1293 | "yaml" 1294 | ], 1295 | "Hash": "547b1105f6a5d9ee56761562ceb63c7d" 1296 | }, 1297 | "tibble": { 1298 | "Package": "tibble", 1299 | "Version": "3.2.1", 1300 | "Source": "Repository", 1301 | "Repository": "CRAN", 1302 | "Requirements": [ 1303 | "R", 1304 | "fansi", 1305 | "lifecycle", 1306 | "magrittr", 1307 | "methods", 1308 | "pillar", 1309 | "pkgconfig", 1310 | "rlang", 1311 | "utils", 1312 | "vctrs" 1313 | ], 1314 | "Hash": "a84e2cc86d07289b3b6f5069df7a004c" 1315 | }, 1316 | "tidyr": { 1317 | "Package": "tidyr", 1318 | "Version": "1.3.0", 1319 | "Source": "Repository", 1320 | "Repository": "CRAN", 1321 | "Requirements": [ 1322 | "R", 1323 | "cli", 1324 | "cpp11", 1325 | "dplyr", 1326 | "glue", 1327 | "lifecycle", 1328 | "magrittr", 1329 | "purrr", 1330 | "rlang", 1331 | "stringr", 1332 | "tibble", 1333 | "tidyselect", 1334 | "utils", 1335 | "vctrs" 1336 | ], 1337 | "Hash": "e47debdc7ce599b070c8e78e8ac0cfcf" 1338 | }, 1339 | "tidyselect": { 1340 | "Package": "tidyselect", 1341 | "Version": "1.2.0", 1342 | "Source": "Repository", 1343 | "Repository": "CRAN", 1344 | "Requirements": [ 1345 | "R", 1346 | "cli", 1347 | "glue", 1348 | "lifecycle", 1349 | "rlang", 1350 | "vctrs", 1351 | "withr" 1352 | ], 1353 | "Hash": "79540e5fcd9e0435af547d885f184fd5" 1354 | }, 1355 | "tinytex": { 1356 | "Package": "tinytex", 1357 | "Version": "0.45", 1358 | "Source": "Repository", 1359 | "Repository": "CRAN", 1360 | "Requirements": [ 1361 | "xfun" 1362 | ], 1363 | "Hash": "e4e357f28c2edff493936b6cb30c3d65" 1364 | }, 1365 | "tzdb": { 1366 | "Package": "tzdb", 1367 | "Version": "0.4.0", 1368 | "Source": "Repository", 1369 | "Repository": "CRAN", 1370 | "Requirements": [ 1371 | "R", 1372 | "cpp11" 1373 | ], 1374 | "Hash": "f561504ec2897f4d46f0c7657e488ae1" 1375 | }, 1376 | "utf8": { 1377 | "Package": "utf8", 1378 | "Version": "1.2.3", 1379 | "Source": "Repository", 1380 | "Repository": "CRAN", 1381 | "Requirements": [ 1382 | "R" 1383 | ], 1384 | "Hash": "1fe17157424bb09c48a8b3b550c753bc" 1385 | }, 1386 | "vctrs": { 1387 | "Package": "vctrs", 1388 | "Version": "0.6.3", 1389 | "Source": "Repository", 1390 | "Repository": "CRAN", 1391 | "Requirements": [ 1392 | "R", 1393 | "cli", 1394 | "glue", 1395 | "lifecycle", 1396 | "rlang" 1397 | ], 1398 | "Hash": "d0ef2856b83dc33ea6e255caf6229ee2" 1399 | }, 1400 | "viridis": { 1401 | "Package": "viridis", 1402 | "Version": "0.6.3", 1403 | "Source": "Repository", 1404 | "Repository": "CRAN", 1405 | "Requirements": [ 1406 | "R", 1407 | "ggplot2", 1408 | "gridExtra", 1409 | "viridisLite" 1410 | ], 1411 | "Hash": "0d774f552202add033efc43a30293b3f" 1412 | }, 1413 | "viridisLite": { 1414 | "Package": "viridisLite", 1415 | "Version": "0.4.2", 1416 | "Source": "Repository", 1417 | "Repository": "CRAN", 1418 | "Requirements": [ 1419 | "R" 1420 | ], 1421 | "Hash": "c826c7c4241b6fc89ff55aaea3fa7491" 1422 | }, 1423 | "visualizationQualityControl": { 1424 | "Package": "visualizationQualityControl", 1425 | "Version": "0.4.10", 1426 | "Source": "GitHub", 1427 | "RemoteType": "github", 1428 | "RemoteHost": "api.github.com", 1429 | "RemoteUsername": "moseleybioinformaticslab", 1430 | "RemoteRepo": "visualizationqualitycontrol", 1431 | "RemoteRef": "main", 1432 | "RemoteSha": "7590a726995a742192b3b21ca4367d746d600857", 1433 | "Remotes": "github::MoseleyBioinformaticsLab/ICIKendallTau", 1434 | "Requirements": [ 1435 | "ComplexHeatmap", 1436 | "R", 1437 | "Rcpp", 1438 | "broom", 1439 | "colorspace", 1440 | "dendsort", 1441 | "dplyr", 1442 | "ggplot2", 1443 | "knitrProgressBar", 1444 | "magrittr", 1445 | "stats" 1446 | ], 1447 | "Hash": "e228f19dee1db77ade1160e6339014ec" 1448 | }, 1449 | "vroom": { 1450 | "Package": "vroom", 1451 | "Version": "1.6.3", 1452 | "Source": "Repository", 1453 | "Repository": "CRAN", 1454 | "Requirements": [ 1455 | "R", 1456 | "bit64", 1457 | "cli", 1458 | "cpp11", 1459 | "crayon", 1460 | "glue", 1461 | "hms", 1462 | "lifecycle", 1463 | "methods", 1464 | "progress", 1465 | "rlang", 1466 | "stats", 1467 | "tibble", 1468 | "tidyselect", 1469 | "tzdb", 1470 | "vctrs", 1471 | "withr" 1472 | ], 1473 | "Hash": "8318e64ffb3a70e652494017ec455561" 1474 | }, 1475 | "withr": { 1476 | "Package": "withr", 1477 | "Version": "2.5.0", 1478 | "Source": "Repository", 1479 | "Repository": "CRAN", 1480 | "Requirements": [ 1481 | "R", 1482 | "grDevices", 1483 | "graphics", 1484 | "stats" 1485 | ], 1486 | "Hash": "c0e49a9760983e81e55cdd9be92e7182" 1487 | }, 1488 | "xfun": { 1489 | "Package": "xfun", 1490 | "Version": "0.39", 1491 | "Source": "Repository", 1492 | "Repository": "CRAN", 1493 | "Requirements": [ 1494 | "stats", 1495 | "tools" 1496 | ], 1497 | "Hash": "8f56e9acb54fb525e66464d57ab58bcb" 1498 | }, 1499 | "yaml": { 1500 | "Package": "yaml", 1501 | "Version": "2.3.7", 1502 | "Source": "Repository", 1503 | "Repository": "CRAN", 1504 | "Hash": "0d0056cc5383fbc240ccd0cb584bf436" 1505 | } 1506 | } 1507 | } 1508 | --------------------------------------------------------------------------------