From b3ec860e0b7ee8dbde319e29774e855174a2acca Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Fri, 12 Mar 2021 09:44:47 -0500 Subject: [PATCH 01/74] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index ad4361e..15f93a1 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,7 @@ iCellR is an interactive R package to work with high-throughput single cell sequ - Tutorial: [example 1 code](https://genome.med.nyu.edu/results/external/iCellR/example1/code.txt) and [results](https://genome.med.nyu.edu/results/external/iCellR/example1/) (based on KNetL map drawing) - Tutorial: [example 2 code](https://genome.med.nyu.edu/results/external/iCellR/example2/code.txt) and [results](https://genome.med.nyu.edu/results/external/iCellR/example2/) (based on CPCA batch alignment and KNetL map drawing) - Link to a video tutorial for CITE-Seq and scRNA-Seq analysis: [Video](https://vimeo.com/337822487) +- All you need to know about KNetL map: [Video](https://youtu.be/tkoPTVciQm0) - Link to manual [Manual](https://cran.r-project.org/web/packages/iCellR/iCellR.pdf) and Comprehensive R Archive Network [(CRAN)](https://cran.r-project.org/web/packages/iCellR/index.html). iCellR Viewer (web GUI app): https://compbio.nyumc.org/icellr/ From 09c15f853dd56a340a0fad7f3070209edf7a0adb Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Fri, 12 Mar 2021 09:49:12 -0500 Subject: [PATCH 02/74] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 15f93a1..7e66b8b 100644 --- a/README.md +++ b/README.md @@ -422,9 +422,9 @@ my.obj <- run.pc.tsne(my.obj, dims = 1:10) # UMAP my.obj <- run.umap(my.obj, dims = 1:10) -# KNetL (for lager than 5000 cell use a k of about 400) +# KNetL (for lager than 5000 cell use a zoom of about 400) # Because knetl has a very high resolution it's best to use a dim of 20 (this usually works best for most data) -my.obj <- run.knetl(my.obj, dims = 1:20, zoom = 110, dim.redux = "umap") +my.obj <- run.knetl(my.obj, dims = 1:20, zoom = 110, dim.redux = "umap") # (Important note!) don't forget to set the zoom in the right range ########################### IMPORTANT NOTE ######################################## #### Because KNetl has a very high resolution it's best to use a dim of 20 (this usually works best for most data) From 6582acf6670488f6b23f860331177c2d02684bcc Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Fri, 12 Mar 2021 10:15:32 -0500 Subject: [PATCH 03/74] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7e66b8b..3b7910d 100644 --- a/README.md +++ b/README.md @@ -411,7 +411,7 @@ opt.pcs.plot(my.obj)

-- Perform other dimensionality reductiond (tSNE, UMAP, KNetL, PHATE, diffusion map) +- Perform other dimensionality reductions (tSNE, UMAP, KNetL, PHATE, destiny, diffusion maps) We recommend tSNE, UMAP and KNetL. KNetL is fundamentally more powerful. From 93c5a0a1bf85a1ab26cb907ff9a2879f09b203a4 Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Fri, 12 Mar 2021 10:20:29 -0500 Subject: [PATCH 04/74] Update README.md --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 3b7910d..3ceb716 100644 --- a/README.md +++ b/README.md @@ -510,6 +510,10 @@ This is one of the harder parts of the analysis and sometimes you need to adjust my.obj <- iclust(my.obj, sensitivity = 150, data.type = "knetl") +# clustering based on PCA + +# my.obj <- iclust(my.obj, sensitivity = 150, data.type = "pca", dims=1:10) + # play with k to get the clusters right. Usually 150 is good. ###### more examples From e1442280e52e3c3ca52547de017b9cd453c9232d Mon Sep 17 00:00:00 2001 From: Khodadadi-Jamayran Date: Mon, 29 Mar 2021 19:03:02 -0400 Subject: [PATCH 05/74] ST --- DESCRIPTION | 4 ++-- R/F0021.R | 19 +++++++++++++------ R/F0028.R | 3 +++ R/F0070.R | 26 +++++++++++++++----------- man/clust.avg.exp.Rd | 12 +++++++++++- man/spatial.plot.Rd | 2 +- 6 files changed, 45 insertions(+), 21 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 0f6f05d..99405d2 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: iCellR Type: Package Title: Analyzing High-Throughput Single Cell Sequencing Data -Version: 1.6.1 +Version: 1.6.2 Authors@R: c( person(given = 'Alireza', family = 'Khodadadi-Jamayran',role = c('aut','cre'), email = 'alireza.khodadadi.j@gmail.com', comment = c(ORCID = '0000-0003-2495-7504')), person(given = 'Joseph', family = 'Pucella',role = c('aut','ctb'), comment = c(ORCID = '0000-0003-0875-8046')), @@ -27,7 +27,7 @@ RoxygenNote: 7.1.1 BugReports: https://github.com/rezakj/iCellR/issues URL: https://github.com/rezakj/iCellR NeedsCompilation: yes -Packaged: 2021-03-03 22:59:24 UTC; khodaa01 +Packaged: 2021-03-29 23:01:15 UTC; khodaa01 Author: Alireza Khodadadi-Jamayran [aut, cre] (), Joseph Pucella [aut, ctb] (), diff --git a/R/F0021.R b/R/F0021.R index b090d1e..cbb1195 100644 --- a/R/F0021.R +++ b/R/F0021.R @@ -4,12 +4,16 @@ #' @param x An object of class iCellR. #' @param data.type Choose from "main" and "imputed", default = "main" #' @param conds.to.avg Choose the conditions you want to average, default = NULL (all conditions). +#' @param rounding.digits integer indicating the number of decimal places (round) or significant digits (signif) to be used. +#' @param round.num Rounding of Numbers, default = FALSE. #' @return An object of class iCellR. #' @import progress #' @export clust.avg.exp <- function (x = NULL, data.type = "main", - conds.to.avg = NULL) { + conds.to.avg = NULL, + rounding.digits = 4, + round.num = FALSE) { if ("iCellR" != class(x)[1]) { stop("x should be an object of class iCellR") } @@ -55,16 +59,17 @@ clust.avg.exp <- function (x = NULL, colnames(DATA) <- NameCol DATA <- cbind(gene = rownames(DATA), DATA) rownames(DATA) <- NULL -# eval(call("<-", as.name(NameCol), DATA)) - datalist[[i]] <- DATA + eval(call("<-", as.name(NameCol), DATA)) +# datalist[[i]] <- DATA } # multmerge = function(mypath){ # filenames=list.files(pattern="meanExp") # datalist = lapply(filenames, function(x){read.table(file=x,header=T)}) # Reduce(function(x,y) {merge(x,y)}, datalist) # } -# filenames <- ls(pattern="cluster_") -# datalist <- mget(filenames) + filenames <- ls(pattern="cluster_") + filenames <- filenames[order(nchar(filenames))] + datalist <- mget(filenames) MeanExpForClusters <- Reduce(function(x,y) {merge(x,y)}, datalist) # # MeanExpForClusters <- multmerge() @@ -79,7 +84,9 @@ clust.avg.exp <- function (x = NULL, row.names(data) <- data$gene data <- data[,-1] # data = as.data.frame(sapply(data, as.numeric)) - data <- round(data,digits=4) + if (round.num == TRUE) { + data <- round(data, digits = rounding.digits) + } data <- cbind(gene=MeanExpForClusters$gene,data) # MeanExpForClusters <- MeanExpForClusters[order(nchar(colnames(MeanExpForClusters)),colnames(MeanExpForClusters))] attributes(x)$clust.avg <- data diff --git a/R/F0028.R b/R/F0028.R index 3012058..784f56c 100644 --- a/R/F0028.R +++ b/R/F0028.R @@ -38,6 +38,9 @@ findMarkers <- function (x = NULL, # get avrages x <- clust.avg.exp(x, data.type = data.type) DATA <- x@best.clust + if(!is.numeric(DATA$clusters)){ + stop("Cluster names have to be numeric") + } ############## set wich clusters you want as condition 1 and 2 MyClusts <- as.numeric(unique(DATA$clusters)) MyClusts <- sort(MyClusts) diff --git a/R/F0070.R b/R/F0070.R index c64c351..8ef43b4 100644 --- a/R/F0070.R +++ b/R/F0070.R @@ -31,7 +31,7 @@ #' @importFrom ggplot2 ggplot theme_classic geom_segment geom_violin guide_colorbar guide_legend guides scale_color_discrete scale_colour_gradient scale_fill_gradient2 scale_x_continuous scale_y_continuous scale_y_discrete stat_summary coord_polar element_rect element_text element_blank facet_wrap scale_color_manual geom_hline geom_jitter geom_vline ylab xlab ggtitle theme_bw aes theme geom_bar geom_point geom_boxplot geom_errorbar position_dodge geom_tile geom_density geom_line #' @export spatial.plot <- function (x = NULL, - cell.size = 0.5, + cell.size = 1, cell.colors = c("gray","red"), back.col = "black", col.by = "clusters", @@ -164,6 +164,8 @@ if (col.by == "cc") { if (!is.null(conds.to.plot)) { data <- subset(data, data$MYconds %in% conds.to.plot) } +################# Fix V5 +# data$V5 <- data$V5 + ((min(data$V5)) * -1) ############################# plot if (!is.numeric(data$clusters)) { if(length(MYConds) == 1) { @@ -185,8 +187,10 @@ if (col.by == "cc") { ############# Annotation if (anno.clust == TRUE) { cords <- aggregate(data[, 6:7], list(data$clusters), mean) - MYX=(cords$V5) * -1 - MYY=(cords$V6) * -1 +# MYX=(cords$V5) * -1 +# MYY=(cords$V6) * -1 + MYX=(cords$V6) + MYY=(cords$V5) MYZ=cords$Group.1 myPLOT <- myPLOT + annotate("text", x = MYX, @@ -204,9 +208,9 @@ if (col.by == "cc") { guides(colour = guide_legend(override.aes = list(size=5))) + scale_color_discrete(name="") + ggtitle(MyTitle) + - theme(panel.background = element_rect(fill = "black", colour = "black"), + theme(panel.background = element_rect(fill = back.col, colour = back.col), panel.grid.major = element_blank(), panel.grid.minor = element_blank(), - legend.key = element_rect(fill = "black")) + + legend.key = element_rect(fill = back.col)) + theme(axis.title.x=element_blank(), axis.text.x=element_blank(), axis.ticks.x=element_blank()) + @@ -216,8 +220,8 @@ if (col.by == "cc") { ############# Annotation if (anno.clust == TRUE) { cords <- aggregate(data[, 6:7], list(data$clusters), mean) - MYX=(cords$V5) * -1 - MYY=(cords$V6) * -1 + MYX=(cords$V6) + MYY=(cords$V5) MYZ=cords$Group.1 myPLOT <- myPLOT + annotate("text", x = MYX, @@ -236,9 +240,9 @@ if (col.by == "cc") { guides(colour = guide_legend(override.aes = list(size=5))) + scale_color_discrete(name="") + ggtitle(MyTitle) + - theme(panel.background = element_rect(fill = "black", colour = "black"), + theme(panel.background = element_rect(fill = back.col, colour = back.col), panel.grid.major = element_blank(), panel.grid.minor = element_blank(), - legend.key = element_rect(fill = "black")) + + legend.key = element_rect(fill = back.col)) + theme(axis.title.x=element_blank(), axis.text.x=element_blank(), axis.ticks.x=element_blank()) + @@ -274,9 +278,9 @@ if (col.by == "cc") { geom_point(size = cell.size, alpha = cell.transparency) + scale_colour_gradient(low = cell.colors[1], high = cell.colors[2], name="") + ggtitle(MyTitle) + - theme(panel.background = element_rect(fill = "black", colour = "black"), + theme(panel.background = element_rect(fill = back.col, colour = back.col), panel.grid.major = element_blank(), panel.grid.minor = element_blank(), - legend.key = element_rect(fill = "black")) + + legend.key = element_rect(fill = back.col)) + theme(axis.title.x=element_blank(), axis.text.x=element_blank(), axis.ticks.x=element_blank()) + diff --git a/man/clust.avg.exp.Rd b/man/clust.avg.exp.Rd index 13ab719..97c58c5 100644 --- a/man/clust.avg.exp.Rd +++ b/man/clust.avg.exp.Rd @@ -4,7 +4,13 @@ \alias{clust.avg.exp} \title{Create a data frame of mean expression of genes per cluster} \usage{ -clust.avg.exp(x = NULL, data.type = "main", conds.to.avg = NULL) +clust.avg.exp( + x = NULL, + data.type = "main", + conds.to.avg = NULL, + rounding.digits = 4, + round.num = FALSE +) } \arguments{ \item{x}{An object of class iCellR.} @@ -12,6 +18,10 @@ clust.avg.exp(x = NULL, data.type = "main", conds.to.avg = NULL) \item{data.type}{Choose from "main" and "imputed", default = "main"} \item{conds.to.avg}{Choose the conditions you want to average, default = NULL (all conditions).} + +\item{rounding.digits}{integer indicating the number of decimal places (round) or significant digits (signif) to be used.} + +\item{round.num}{Rounding of Numbers, default = FALSE.} } \value{ An object of class iCellR. diff --git a/man/spatial.plot.Rd b/man/spatial.plot.Rd index 92dbf59..d10df7d 100644 --- a/man/spatial.plot.Rd +++ b/man/spatial.plot.Rd @@ -6,7 +6,7 @@ \usage{ spatial.plot( x = NULL, - cell.size = 0.5, + cell.size = 1, cell.colors = c("gray", "red"), back.col = "black", col.by = "clusters", From 89c4f28022cdbe43a24eb49e3f907cd319d41ea4 Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Mon, 29 Mar 2021 19:05:44 -0400 Subject: [PATCH 06/74] Update README.md --- README.md | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index ad4361e..3ceb716 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,7 @@ iCellR is an interactive R package to work with high-throughput single cell sequ - Tutorial: [example 1 code](https://genome.med.nyu.edu/results/external/iCellR/example1/code.txt) and [results](https://genome.med.nyu.edu/results/external/iCellR/example1/) (based on KNetL map drawing) - Tutorial: [example 2 code](https://genome.med.nyu.edu/results/external/iCellR/example2/code.txt) and [results](https://genome.med.nyu.edu/results/external/iCellR/example2/) (based on CPCA batch alignment and KNetL map drawing) - Link to a video tutorial for CITE-Seq and scRNA-Seq analysis: [Video](https://vimeo.com/337822487) +- All you need to know about KNetL map: [Video](https://youtu.be/tkoPTVciQm0) - Link to manual [Manual](https://cran.r-project.org/web/packages/iCellR/iCellR.pdf) and Comprehensive R Archive Network [(CRAN)](https://cran.r-project.org/web/packages/iCellR/index.html). iCellR Viewer (web GUI app): https://compbio.nyumc.org/icellr/ @@ -410,7 +411,7 @@ opt.pcs.plot(my.obj)

-- Perform other dimensionality reductiond (tSNE, UMAP, KNetL, PHATE, diffusion map) +- Perform other dimensionality reductions (tSNE, UMAP, KNetL, PHATE, destiny, diffusion maps) We recommend tSNE, UMAP and KNetL. KNetL is fundamentally more powerful. @@ -421,9 +422,9 @@ my.obj <- run.pc.tsne(my.obj, dims = 1:10) # UMAP my.obj <- run.umap(my.obj, dims = 1:10) -# KNetL (for lager than 5000 cell use a k of about 400) +# KNetL (for lager than 5000 cell use a zoom of about 400) # Because knetl has a very high resolution it's best to use a dim of 20 (this usually works best for most data) -my.obj <- run.knetl(my.obj, dims = 1:20, zoom = 110, dim.redux = "umap") +my.obj <- run.knetl(my.obj, dims = 1:20, zoom = 110, dim.redux = "umap") # (Important note!) don't forget to set the zoom in the right range ########################### IMPORTANT NOTE ######################################## #### Because KNetl has a very high resolution it's best to use a dim of 20 (this usually works best for most data) @@ -509,6 +510,10 @@ This is one of the harder parts of the analysis and sometimes you need to adjust my.obj <- iclust(my.obj, sensitivity = 150, data.type = "knetl") +# clustering based on PCA + +# my.obj <- iclust(my.obj, sensitivity = 150, data.type = "pca", dims=1:10) + # play with k to get the clusters right. Usually 150 is good. ###### more examples From 430e783115297fb52c64efb53eef098f9dff915d Mon Sep 17 00:00:00 2001 From: Khodadadi-Jamayran Date: Thu, 1 Apr 2021 13:48:45 -0400 Subject: [PATCH 07/74] baseMeanFix --- DESCRIPTION | 2 +- R/F0028.R | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 99405d2..cbef2b6 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -27,7 +27,7 @@ RoxygenNote: 7.1.1 BugReports: https://github.com/rezakj/iCellR/issues URL: https://github.com/rezakj/iCellR NeedsCompilation: yes -Packaged: 2021-03-29 23:01:15 UTC; khodaa01 +Packaged: 2021-04-01 17:47:14 UTC; khodaa01 Author: Alireza Khodadadi-Jamayran [aut, cre] (), Joseph Pucella [aut, ctb] (), diff --git a/R/F0028.R b/R/F0028.R index 784f56c..08237f6 100644 --- a/R/F0028.R +++ b/R/F0028.R @@ -172,8 +172,8 @@ findMarkers <- function (x = NULL, dfm <- dfm[order(myClustOrd, decreasing = FALSE),] df <- as.data.frame(dfm) ####### - df$clusters <- as.numeric(df$clusters) - df$baseMean <- as.numeric(df$baseMean) + df$clusters <- as.numeric(as.character(df$clusters)) + df$baseMean <- as.numeric(as.character(df$baseMean)) ###### message("All done!") return(df) From 13befd5a4c2a6e26f2182312eb30d0b943636259 Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Fri, 16 Apr 2021 10:57:21 -0400 Subject: [PATCH 08/74] Update README.md --- README.md | 142 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) diff --git a/README.md b/README.md index 3ceb716..9dcd47e 100644 --- a/README.md +++ b/README.md @@ -2739,3 +2739,145 @@ dev.off()

+# Single cell ATAC sequencing with scRNA-Seq (scATAC-Seq) + +```r +library("iCellR") +my.data <- load10x("filtered_gene_bc_matrices/") + +# see the row names +row.names(my.data) + +# get peak names +ATAC <- grep("^chr",row.names(my.data),value=T) + +# get scATAC data +MyATAC <- subset(my.data, row.names(my.data) %in% ATAC) +head(MyATAC)[1:3] +# AAACAGCCAAGTGAAC.1 AAACAGCCACTGACCG.1 AAACAGCCATGATTGT.1 +#chr1.181218.181695 0 0 1 +#chr1.191296.191699 0 0 0 +#chr1.629770.630129 0 0 0 +#chr1.633806.634251 0 0 0 +#chr1.778422.779040 0 0 0 +#chr1.827306.827702 0 0 0 + +dim(MyATAC) +# [1] 21923 6326 + +# get RNA data +MyRNAs <- subset(my.data, !row.names(my.data) %in% ATAC) +head(MyRNAs)[1:3] +# AAACAGCCAAGTGAAC.1 AAACAGCCACTGACCG.1 AAACAGCCATGATTGT.1 +#MIR1302.2HG 0 0 0 +#FAM138A 0 0 0 +#OR4F5 0 0 0 +#AL627309.1 0 0 0 +#AL627309.3 0 0 0 +#AL627309.2 0 0 0 + +dim(MyRNAs) +#[1] 36633 6326 + +# make iCellR object +my.obj <- make.obj(MyRNAs) + +# add ATAC-Seq data +my.obj@atac.raw <- MyATAC +my.obj@atac.main <- MyATAC + +# check your object +my.obj + + +################################### +,--. ,-----. ,--.,--.,------. +`--'' .--./ ,---. | || || .--. ' +,--.| | | .-. :| || || '--'.' +| |' '--'\ --. | || || | +`--' `-----' `----'`--'`--'`--' '--' +################################### +An object of class iCellR version: 1.6.2 +Raw/original data dimentions (rows,columns): 24127,6326 +Data conditions: no conditions/single sample +Row names: MIR1302.2HG,TTLL10.AS1,MRPL20.AS1 ... +Columns names: AAACAGCCAAGTGAAC.1,AAACAGCCACTGACCG.1,AAACAGCCATGATTGT.1 ... +################################### + QC stats performed:FALSE, PCA performed:FALSE + Clustering performed:FALSE, Number of clusters:0 + tSNE performed:FALSE, UMAP performed:FALSE, DiffMap performed:FALSE + Main data dimensions (rows,columns): 0,0 + Normalization factors:,... + Imputed data dimensions (rows,columns):0,0 +############## scVDJ-seq ########### +VDJ data dimentions (rows,columns):0,0 +############## CITE-seq ############ + ADT raw data dimensions (rows,columns):0,0 + ADT main data dimensions (rows,columns):0,0 + ADT columns names:... + ADT row names:... +############## scATAC-seq ############ + ATAC raw data dimensions (rows,columns):21923,6326 + ATAC main data dimensions (rows,columns):21923,6326 + ATAC columns names:AAACAGCCAAGTGAAC.1... + ATAC row names:chr1.181218.181695... +############## Spatial ########### +Spatial data dimentions (rows,columns):0,0 +########### iCellR object ########## + +# from here do the regular scRNA-seq as expleind above + +# QC +my.obj <- qc.stats(my.obj, + s.phase.genes = s.phase, + g2m.phase.genes = g2m.phase) + +# plot as mentioned above + +# filter +my.obj <- cell.filter(my.obj, + min.mito = 0, + max.mito = 0.07 , + min.genes = 500, + max.genes = 4000, + min.umis = 0, + max.umis = Inf) + +# normalize RNA +my.obj <- norm.data(my.obj, norm.method = "ranked.glsf", top.rank = 500) + +# normalize ADT +my.obj <- norm.adt(my.obj) + +# gene stats +my.obj <- gene.stats(my.obj, which.data = "main.data") + +# find genes for PCA +my.obj <- make.gene.model(my.obj, my.out.put = "data", + dispersion.limit = 1.5, + base.mean.rank = 500, + no.mito.model = T, + mark.mito = T, + interactive = F, + no.cell.cycle = T, + out.name = "gene.model") + +# run PCA and the rest is as above + +my.obj <- run.pca(my.obj, method = "gene.model", gene.list = my.obj@gene.model,data.type = "main") + +my.obj <- run.umap(my.obj, dims = 1:10) + +... + ``` + + + + + + + + + + + From 125b1bb1557b1d5b584f7e73b6c47ef36419af20 Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Fri, 16 Apr 2021 11:00:36 -0400 Subject: [PATCH 09/74] Update README.md --- README.md | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9dcd47e..3687911 100644 --- a/README.md +++ b/README.md @@ -2825,8 +2825,11 @@ VDJ data dimentions (rows,columns):0,0 Spatial data dimentions (rows,columns):0,0 ########### iCellR object ########## -# from here do the regular scRNA-seq as expleind above + ``` +From here do the regular scRNA-seq as expleind above. See example below + + ```r # QC my.obj <- qc.stats(my.obj, s.phase.genes = s.phase, @@ -2866,9 +2869,22 @@ my.obj <- make.gene.model(my.obj, my.out.put = "data", my.obj <- run.pca(my.obj, method = "gene.model", gene.list = my.obj@gene.model,data.type = "main") +# tSNE +my.obj <- run.pc.tsne(my.obj, dims = 1:10) + +# UMAP my.obj <- run.umap(my.obj, dims = 1:10) -... +# KNetL +my.obj <- run.knetl(my.obj, dims = 1:20, zoom = 110, dim.redux = "umap") + +# clustering based on KNetL + +my.obj <- iclust(my.obj, sensitivity = 150, data.type = "knetl") + +# clustering based on PCA + +# my.obj <- iclust(my.obj, sensitivity = 150, data.type = "pca", dims=1:10) ``` From 0b76efc036a8ddc9d230d2cd56ce41dad5a38140 Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Fri, 16 Apr 2021 11:44:06 -0400 Subject: [PATCH 10/74] Update README.md --- README.md | 44 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 41 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 3687911..65b7c4d 100644 --- a/README.md +++ b/README.md @@ -2876,15 +2876,53 @@ my.obj <- run.pc.tsne(my.obj, dims = 1:10) my.obj <- run.umap(my.obj, dims = 1:10) # KNetL -my.obj <- run.knetl(my.obj, dims = 1:20, zoom = 110, dim.redux = "umap") +my.obj <- run.knetl(my.obj, dims = 1:20, zoom = 200, dim.redux = "umap") # clustering based on KNetL -my.obj <- iclust(my.obj, sensitivity = 150, data.type = "knetl") +my.obj <- iclust(my.obj, sensitivity = 200, data.type = "knetl") # clustering based on PCA -# my.obj <- iclust(my.obj, sensitivity = 150, data.type = "pca", dims=1:10) +# my.obj <- iclust(my.obj, sensitivity = 100, data.type = "pca", dims=1:10) + +# check clusters and adjust if needed (optinal) +# cluster.plot(my.obj,plot.type = "knetl",interactive = F,cell.size = 0.5,cell.transparency = 1, anno.clust=T) +# my.obj <- change.clust(my.obj, change.clust = 3, to.clust = 4) +# my.obj <- change.clust(my.obj, change.clust = 3, to.clust = 10) + +# order clusters +my.obj <- clust.ord(my.obj,top.rank = 500, how.to.order = "distance") + + +# plot +A= cluster.plot(my.obj,plot.type = "pca",interactive = F,cell.size = 0.5,cell.transparency = 1, anno.clust=T) +B= cluster.plot(my.obj,plot.type = "umap",interactive = F,cell.size = 0.5,cell.transparency = 1, anno.clust=T) +C= cluster.plot(my.obj,plot.type = "tsne",interactive = F,cell.size = 0.5,cell.transparency = 1, anno.clust=T) +D= cluster.plot(my.obj,plot.type = "knetl",interactive = F,cell.size = 0.5,cell.transparency = 1, anno.clust=T) + +library(gridExtra) +png('AllClusts.png', width = 12, height = 10, units = 'in', res = 300) +grid.arrange(A,B,C,D) +dev.off() + +# save object +save(my.obj, file = "my.obj.Robj") + +# find markers +marker.genes <- findMarkers(my.obj, + data.type = "main", + fold.change = 2, + padjval = 0.1, + uniq = F, + positive = T) + +MyGenes <- top.markers(marker.genes, topde = 10, min.base.mean = 0.2, filt.ambig = F) +MyGenes <- unique(MyGenes) + +png('heatmap_gg_genes.png', width = 10, height = 10, units = 'in', res = 300) +heatmap.gg.plot(my.obj, gene = MyGenes, interactive = F, cluster.by = "clusters",cell.sort = F, conds.to.plot = NULL) +dev.off() ``` From 290947063d8643d5e242f4405dc9f0f9e7f45ea9 Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Fri, 16 Apr 2021 11:50:10 -0400 Subject: [PATCH 11/74] Update README.md --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index 65b7c4d..4243f73 100644 --- a/README.md +++ b/README.md @@ -2916,6 +2916,13 @@ marker.genes <- findMarkers(my.obj, padjval = 0.1, uniq = F, positive = T) + + +head(marker.genes) +marker.genes1 <- cbind(row = rownames(marker.genes), marker.genes) +head(marker.genes1) +dim(marker.genes1) +write.table((marker.genes1),file="marker.genes.tsv", sep="\t", row.names =F) MyGenes <- top.markers(marker.genes, topde = 10, min.base.mean = 0.2, filt.ambig = F) MyGenes <- unique(MyGenes) From 5cdf6b93f1f48f1ab02c194e6f9b49ede5fd15c4 Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Fri, 16 Apr 2021 12:44:11 -0400 Subject: [PATCH 12/74] Update README.md --- README.md | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 4243f73..ba80eca 100644 --- a/README.md +++ b/README.md @@ -2917,11 +2917,7 @@ marker.genes <- findMarkers(my.obj, uniq = F, positive = T) - -head(marker.genes) marker.genes1 <- cbind(row = rownames(marker.genes), marker.genes) -head(marker.genes1) -dim(marker.genes1) write.table((marker.genes1),file="marker.genes.tsv", sep="\t", row.names =F) MyGenes <- top.markers(marker.genes, topde = 10, min.base.mean = 0.2, filt.ambig = F) @@ -2932,7 +2928,24 @@ heatmap.gg.plot(my.obj, gene = MyGenes, interactive = F, cluster.by = "clusters" dev.off() ``` +Work on scATAC data + +```r +# normalize ACAT +my.obj <- norm.data(my.obj, norm.method = "ranked.glsf", top.rank = 500, ATAC.data = TRUE, ATAC.filter = TRUE) +marker.peaks <- findMarkers(my.obj, + data.type = "atac", + fold.change = 2, + padjval = 0.1, + uniq = F, + positive = T) + +marker.peaks1 <- cbind(row = rownames(marker.peaks), marker.genes) +write.table((marker.peaks1),file="marker.peaks.tsv", sep="\t", row.names =F) + +head(marker.peaks1) +``` From dad5cc944d725da6428dd9dd3f9184bffb3f8031 Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Fri, 16 Apr 2021 12:55:40 -0400 Subject: [PATCH 13/74] Update README.md --- README.md | 52 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index ba80eca..02466c5 100644 --- a/README.md +++ b/README.md @@ -2941,10 +2941,60 @@ marker.peaks <- findMarkers(my.obj, uniq = F, positive = T) -marker.peaks1 <- cbind(row = rownames(marker.peaks), marker.genes) +marker.peaks1 <- cbind(row = rownames(marker.peaks), marker.peaks) write.table((marker.peaks1),file="marker.peaks.tsv", sep="\t", row.names =F) head(marker.peaks1) +# row baseMean baseSD +#chr17.64986035.64986113 chr17.64986035.64986113 0.01217359 0.18257818 +#chr1.26542287.26542678 chr1.26542287.26542678 0.05828764 0.80077656 +#chr4.8199063.8199275 chr4.8199063.8199275 0.04280424 0.56205649 +#chr20.50274929.50275237 chr20.50274929.50275237 0.04684509 0.63361490 +#chr2.218382038.218382236 chr2.218382038.218382236 0.03122394 0.31153105 +#chr11.1760469.1760814 chr11.1760469.1760814 0.07050175 0.63322284 +# AvExpInCluster AvExpInOtherClusters foldChange +#chr17.64986035.64986113 0.07868394 0.002346603 33.530999 +#chr1.26542287.26542678 0.33849093 0.016887273 20.044144 +#chr4.8199063.8199275 0.24803497 0.012481148 19.872769 +#chr20.50274929.50275237 0.27007513 0.013862584 19.482308 +#chr2.218382038.218382236 0.17736269 0.009631770 18.414340 +#chr11.1760469.1760814 0.39043782 0.023230813 16.806894 +# log2FoldChange pval padj clusters +#chr17.64986035.64986113 5.067424 1.187697e-05 2.875415e-02 1 +#chr1.26542287.26542678 4.325109 3.653916e-05 8.539202e-02 1 +#chr4.8199063.8199275 4.312721 6.059691e-06 1.489472e-02 1 +#chr20.50274929.50275237 4.284093 2.871301e-05 6.779143e-02 1 +#chr2.218382038.218382236 4.202758 6.359572e-10 1.677019e-06 1 +#chr11.1760469.1760814 4.070981 6.813447e-11 1.800794e-07 1 +# gene cluster_1 cluster_2 +#chr17.64986035.64986113 chr17.64986035.64986113 0.0786839378 0.000000000 +#chr1.26542287.26542678 chr1.26542287.26542678 0.3384909326 0.008895062 +#chr4.8199063.8199275 chr4.8199063.8199275 0.2480349741 0.038672840 +#chr20.50274929.50275237 chr20.50274929.50275237 0.2700751295 0.028703704 +#chr2.218382038.218382236 chr2.218382038.218382236 0.1773626943 0.000000000 +#chr11.1760469.1760814 chr11.1760469.1760814 0.3904378238 0.004537037 +# cluster_3 cluster_4 cluster_5 cluster_6 +#chr17.64986035.64986113 0.000000000 0.0000000000 0.0006934750 0.0010038760 +#chr1.26542287.26542678 0.031485714 0.0029244992 0.0052261002 0.0041264535 +#chr4.8199063.8199275 0.000000000 0.0007226502 0.0027450683 0.0113212209 +#chr20.50274929.50275237 0.027092857 0.0121741140 0.0041820941 0.0051516473 +#chr2.218382038.218382236 0.004292857 0.0042095532 0.0006722307 0.0038561047 +#chr11.1760469.1760814 0.071678571 0.0177288136 0.0141820941 0.0061099806 +# cluster_7 cluster_8 +#chr17.64986035.64986113 0.003099029 0.009080357 +#chr1.26542287.26542678 0.047110680 0.044484375 +#chr4.8199063.8199275 0.014819417 0.028651786 +#chr20.50274929.50275237 0.025499029 0.028765625 +#chr2.218382038.218382236 0.011988350 0.035508929 +#chr11.1760469.1760814 0.042093204 0.050708705 + +MyGenes <- top.markers(marker.peaks, topde = 10, min.base.mean = 0.2, filt.ambig = F) +MyGenes <- unique(MyGenes) + +png('heatmap_gg_peaks.png', width = 10, height = 10, units = 'in', res = 300) +heatmap.gg.plot(my.obj, gene = MyGenes, interactive = F, cluster.by = "clusters",cell.sort = F, conds.to.plot = NULL) +dev.off() + ``` From db3689aa9158d59a9aefcd766c6132dd730f8774 Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Fri, 16 Apr 2021 13:41:10 -0400 Subject: [PATCH 14/74] Update README.md --- README.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 02466c5..4d3a8c7 100644 --- a/README.md +++ b/README.md @@ -2992,9 +2992,15 @@ MyGenes <- top.markers(marker.peaks, topde = 10, min.base.mean = 0.2, filt.ambig MyGenes <- unique(MyGenes) png('heatmap_gg_peaks.png', width = 10, height = 10, units = 'in', res = 300) -heatmap.gg.plot(my.obj, gene = MyGenes, interactive = F, cluster.by = "clusters",cell.sort = F, conds.to.plot = NULL) +heatmap.gg.plot(my.obj, gene = MyGenes, interactive = F, cluster.by = "clusters",cell.sort = F, conds.to.plot = NULL, data.type = "atac") dev.off() +my.obj <- run.impute(my.obj,data.type = "knetl", nn = 10, ATAC.data = FALSE) + + +png('heatmap_gg_peaks.png', width = 10, height = 10, units = 'in', res = 300) +heatmap.gg.plot(my.obj, gene = MyGenes, interactive = F, cluster.by = "clusters",cell.sort = F, conds.to.plot = NULL, data.type = "atac.imputed") +dev.off() ``` From 9f46e1eb8a7bd4d03b34b508b6a76576ab5b3b38 Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Fri, 16 Apr 2021 14:37:46 -0400 Subject: [PATCH 15/74] Update README.md --- README.md | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/README.md b/README.md index 4d3a8c7..db84961 100644 --- a/README.md +++ b/README.md @@ -3003,8 +3003,69 @@ heatmap.gg.plot(my.obj, gene = MyGenes, interactive = F, cluster.by = "clusters" dev.off() ``` +Peak analysis +```r +# make bed file per cluster +make.bed(marker.peaks) + +# load packages +library(ChIPseeker) +library(clusterProfiler) + +# load genome +require(TxDb.Hsapiens.UCSC.hg38.knownGene) +txdb <- TxDb.Hsapiens.UCSC.hg38.knownGene +Anno="org.Hs.eg.db" + +# load bed files +Mylist1 = list.files(pattern=".bed") +Mylist1 + +Mylist <- as.list(Mylist1) +NAMES <- gsub('_peaks.bed','',Mylist1) +names(Mylist) <- NAMES +files <- Mylist +files + +# perform analysis (example) +promoter <- getPromoters(TxDb=txdb, upstream=3000, downstream=3000) +tagMatrixList <- lapply(files, getTagMatrix, windows=promoter) + +pdf("Plot_ProfileLineAll.pdf") +plotAvgProf(tagMatrixList, xlim=c(-3000, 3000)) +dev.off() + +pdf('Plot_ProfileLine.pdf', width = 8, height = 10) +plotAvgProf(tagMatrixList, xlim=c(-3000, 3000), facet="row") +dev.off() + +pdf("Plot_heatmaps.pdf", width = 50, height = 6) +tagHeatmap(tagMatrixList, xlim=c(-3000, 3000), color=NULL) +dev.off() + +# annotate +peakAnnoList <- lapply(files, annotatePeak, TxDb=txdb, + tssRegion=c(-3000, 3000), verbose=FALSE) +# plot annotatin +pdf("Plot_AnnoBar.pdf") +plotAnnoBar(peakAnnoList) +dev.off() + +############### peak annotation + +peakAnnoList <- lapply(files, annotatePeak, TxDb=txdb, + tssRegion=c(-3000, 3000), verbose=FALSE, annoDb=Anno) +capture.output(peakAnnoList, file = "peakAnnoList.txt") + +genes = lapply(peakAnnoList, function(i) as.data.frame(i)) + +lapply(1:length(genes), function(i) write.table(genes[[i]], + file = paste0(names(genes[i]), ".xls"), + row.names = FALSE, sep="\t")) + +``` From 398cba072da136674be98ec4ba5ebf12a10c97d8 Mon Sep 17 00:00:00 2001 From: Khodadadi-Jamayran Date: Tue, 27 Apr 2021 12:47:32 -0400 Subject: [PATCH 16/74] scATAC --- DESCRIPTION | 4 ++-- NAMESPACE | 1 + R/F00100.R | 8 ++++++-- R/F0021.R | 8 +++++++- R/F0022.R | 36 ++++++++++++++++++++++++++++------- R/F0028.R | 11 +++++++++-- R/F0030.R | 8 +++++++- R/F0031.R | 8 +++++++- R/F0044.R | 1 + R/F0057.R | 2 +- R/F0058.R | 16 +++++++++++++++- R/F0072.R | 26 +++++++++++++++++++++++++ R/F008.R | 43 ++++++++++++++++++++++++++++++++++++++---- man/clust.avg.exp.Rd | 2 +- man/findMarkers.Rd | 2 +- man/gene.plot.Rd | 2 +- man/heatmap.gg.plot.Rd | 2 +- man/hto.anno.Rd | 2 +- man/make.bed.Rd | 17 +++++++++++++++++ man/norm.data.Rd | 14 +++++++++++++- man/run.impute.Rd | 9 +++++++++ 21 files changed, 194 insertions(+), 28 deletions(-) create mode 100644 R/F0072.R create mode 100644 man/make.bed.Rd diff --git a/DESCRIPTION b/DESCRIPTION index cbef2b6..d544417 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: iCellR Type: Package Title: Analyzing High-Throughput Single Cell Sequencing Data -Version: 1.6.2 +Version: 1.6.4 Authors@R: c( person(given = 'Alireza', family = 'Khodadadi-Jamayran',role = c('aut','cre'), email = 'alireza.khodadadi.j@gmail.com', comment = c(ORCID = '0000-0003-2495-7504')), person(given = 'Joseph', family = 'Pucella',role = c('aut','ctb'), comment = c(ORCID = '0000-0003-0875-8046')), @@ -27,7 +27,7 @@ RoxygenNote: 7.1.1 BugReports: https://github.com/rezakj/iCellR/issues URL: https://github.com/rezakj/iCellR NeedsCompilation: yes -Packaged: 2021-04-01 17:47:14 UTC; khodaa01 +Packaged: 2021-04-27 16:41:35 UTC; khodaa01 Author: Alireza Khodadadi-Jamayran [aut, cre] (), Joseph Pucella [aut, ctb] (), diff --git a/NAMESPACE b/NAMESPACE index 34a3847..3667903 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -36,6 +36,7 @@ export(iba) export(iclust) export(load.h5) export(load10x) +export(make.bed) export(make.gene.model) export(make.obj) export(myImp) diff --git a/R/F00100.R b/R/F00100.R index 8136698..9c0ef8c 100644 --- a/R/F00100.R +++ b/R/F00100.R @@ -99,7 +99,11 @@ utils::globalVariables(c("%>%", "wilcox.test", "gsva", "V5", - "V6")) + "V6", + "AvExpInOtherClusters", + "X1", + "X2", + "X3")) ######### # F001.load10x.R | F001.R # F002.data.aggregation.R | F002.R @@ -172,4 +176,4 @@ utils::globalVariables(c("%>%", # add.10x.image.R | F0069.R # spatial.plot.R | F0070.R # i.score.R | F0071.R - +# make.bed.R | F0072.R diff --git a/R/F0021.R b/R/F0021.R index cbb1195..81c0f5d 100644 --- a/R/F0021.R +++ b/R/F0021.R @@ -2,7 +2,7 @@ #' #' This function takes an object of class iCellR and creates an average gene expression for every cluster. #' @param x An object of class iCellR. -#' @param data.type Choose from "main" and "imputed", default = "main" +#' @param data.type Choose from "main", "atac", "atac.imputed" and "imputed", default = "main" #' @param conds.to.avg Choose the conditions you want to average, default = NULL (all conditions). #' @param rounding.digits integer indicating the number of decimal places (round) or significant digits (signif) to be used. #' @param round.num Rounding of Numbers, default = FALSE. @@ -42,6 +42,12 @@ clust.avg.exp <- function (x = NULL, if (data.type == "imputed") { Table <- x@imputed.data } + if (data.type == "atac") { + Table <- x@atac.main + } + if (data.type == "atac.imputed") { + Table <- x@atac.imputed + } # Table = x@main.data datalist <- list() ### diff --git a/R/F0022.R b/R/F0022.R index c2c2116..4d36ab0 100644 --- a/R/F0022.R +++ b/R/F0022.R @@ -3,6 +3,7 @@ #' This function takes an object of class iCellR and runs imputation on the main data. #' @param x An object of class iCellR. #' @param imp.method Choose between "iCellR.imp" and "magic", defualt = "iCellR.imp". +#' @param ATAC.data If TURE, it would normalize ATAC-Seq data and not RNA-Seq, default = FALSE. #' @param nn Number of neighboring cells to find, default = 10. #' @param dims PC dimentions to be used for the analysis, default = 10. #' @param data.type Choose between "tsne", "pca", "umap", "diffusion", "knetl", default = "pca". @@ -17,22 +18,35 @@ #' @param verbose 'int' or 'boolean', optional (default : 1) If 'TRUE' or '> 0', message verbose updates. #' @param n.jobs 'int', optional (default: 1) The number of jobs to use for the computation. If -1 all CPUs are used. If 1 is given, no parallel computing code is used at all, which is useful for debugging. For n_jobs below -1, (n.cpus + 1 + n.jobs) are used. Thus for n_jobs = -2, all CPUs but one are used #' @param seed int or 'NULL', random state (default: 'NULL') +#' @param rounding.digits integer indicating the number of decimal places (round) or significant digits (signif) to be used. +#' @param round.num Rounding of Numbers, default = FALSE. #' @return An object of class iCellR. #' @import progress #' @export run.impute <- function (x = NULL, - imp.method = "iCellR.imp", dims = 1:10, nn = 10, - data.type = "pca",genes = "all_genes", k = 10, alpha = 15, t = "auto", + imp.method = "iCellR.imp", + dims = 1:10, nn = 10, ATAC.data = FALSE, + rounding.digits = 4, + round.num = TRUE, + data.type = "pca",genes = "all_genes", + k = 10, alpha = 15, t = "auto", npca = 100, init = NULL, t.max = 20, - knn.dist.method = "euclidean", verbose = 1, n.jobs = 1, + knn.dist.method = "euclidean", + verbose = 1, n.jobs = 1, seed = NULL) { if ("iCellR" != class(x)[1]) { stop("x should be an object of class iCellR") } # get data start_time1 <- Sys.time() - ##### + #### + # get data RNA DATA <- x@main.data + # get data ATAC + if (ATAC.data == TRUE) { + DATA <- x@atac.main + } + #### message(paste(" main data dimentions:",dim(DATA)[1],"genes and",dim(DATA)[2],"cells")) message(" Genes with no coverage are being removed from the matrix ...") DATA <- DATA[ rowSums(DATA) > 0, ] @@ -142,9 +156,17 @@ run.impute <- function (x = NULL, knn.dist.method = knn.dist.method, verbose = verbose, n.jobs = n.jobs, seed = seed) DATA <- as.data.frame(t(data_MAGIC$result)) - # return - DATA <- round(DATA, digits = 3) - attributes(x)$imputed.data <- DATA + ##### + if (round.num == TRUE) { + DATA <- round(DATA, digits = rounding.digits) + } +######### + if (ATAC.data == TRUE) { + attributes(x)$atac.imputed <- DATA + } + if (ATAC.data == FALSE) { + attributes(x)$imputed.data <- DATA + } # return return(x) } diff --git a/R/F0028.R b/R/F0028.R index 08237f6..0278ed1 100644 --- a/R/F0028.R +++ b/R/F0028.R @@ -2,7 +2,7 @@ #' #' This function takes an object of class iCellR and performs differential expression (DE) analysis to find marker genes for each cluster. #' @param x An object of class iCellR. -#' @param data.type Choose from "main" and "imputed", default = "main" +#' @param data.type Choose from "main", "atac", "atac.imputed" and "imputed", default = "main" #' @param fold.change A number that designates the minimum fold change for out put, default = 2. #' @param pval.test Choose from "t.test", "wilcox.test", default = "t.test". #' @param p.adjust.method Correction method. Choose from "holm", "hochberg", "hommel", "bonferroni", "BH", "BY","fdr", "none", default = "hochberg". @@ -34,9 +34,16 @@ findMarkers <- function (x = NULL, if (data.type == "imputed") { dat <- x@imputed.data } + if (data.type == "atac") { + dat <- x@atac.main + } + if (data.type == "atac.imputed") { + dat <- x@atac.imputed + } # get cluster data # get avrages - x <- clust.avg.exp(x, data.type = data.type) + x <- clust.avg.exp(x, data.type = data.type) +########## DATA <- x@best.clust if(!is.numeric(DATA$clusters)){ stop("Cluster names have to be numeric") diff --git a/R/F0030.R b/R/F0030.R index 8978200..d14c398 100644 --- a/R/F0030.R +++ b/R/F0030.R @@ -10,7 +10,7 @@ #' @param interactive If TRUE an html interactive file will be made, default = TRUE. #' @param out.name Output name for html file if interactive = TRUE, default = "plot". #' @param no.key If you want a color legend key, default = FALSE. -#' @param data.type Choose from "main" and "imputed", default = "main". +#' @param data.type Choose from "main", "atac", atac.imputed and "imputed", default = "main". #' @param min.scale Set a minimum color scale, default = -2.5. #' @param max.scale Set a maximum color scale, default = 2.5. #' @param cex.col Chhose a size, default = 10. @@ -61,6 +61,12 @@ heatmap.gg.plot <- function (x = NULL, if (data.type == "imputed") { DATAmain <- x@imputed.data } + if (data.type == "atac") { + DATAmain <- x@atac.main + } + if (data.type == "atac.imputed") { + DATAmain <- x@atac.imputed + } AllGenes = row.names(DATAmain) absent = which((gene %in% AllGenes) == FALSE) absentgenes = gene[absent] diff --git a/R/F0031.R b/R/F0031.R index a594fa9..68cecd2 100644 --- a/R/F0031.R +++ b/R/F0031.R @@ -8,7 +8,7 @@ #' @param plot.data.type Choose between "tsne", "pca", "umap", "knetl", "diffusion", "pseudo.A" and "pseudo.B", default = "tsne". #' @param clust.dim 2 for 2D plots and 3 for 3D plots, default = 2. #' @param col.by Choose from "clusters" and "conditions", default = "clusters". -#' @param data.type Choose from "main" or "imputed", default = "main". +#' @param data.type Choose from "main", "atac, "atac.imputed" and "imputed", default = "main". #' @param scaleValue Scale the colors, default = FALSE. #' @param min.scale If scaleValue = TRUE, set a number for min, default = -2.5. #' @param max.scale If scaleValue = TRUE, set a number for max, default = 2.5. @@ -88,6 +88,12 @@ gene.plot <- function (x = NULL, if (data.type == "imputed") { DATAmain <- x@imputed.data } + if (data.type == "atac") { + DATAmain <- x@atac.main + } + if (data.type == "atac.imputed") { + DATAmain <- x@atac.imputed + } ########## ####### if (is.null(gene)) { diff --git a/R/F0044.R b/R/F0044.R index 3f27fc4..2c26641 100644 --- a/R/F0044.R +++ b/R/F0044.R @@ -6,6 +6,7 @@ setClass("iCellR", representation (raw.data = "data.frame", metadata = "data.frame", atac.raw = "data.frame", atac.main = "data.frame", + atac.imputed = "data.frame", spatial.info = "list", spatial.data = "data.frame", stats = "data.frame", diff --git a/R/F0057.R b/R/F0057.R index cf7e6b5..211848d 100644 --- a/R/F0057.R +++ b/R/F0057.R @@ -2,7 +2,7 @@ #' #' Demultiplexing HTOs #' @param hto.data HTO raw data -#' @param cov.thr A number which avrage coverage is devided by to set a thershold for low coverage, default = 10. +#' @param cov.thr A number which average coverage is divided by to set a threshold for low coverage. For example 10 means it is 10 time less than the average. default = 10. #' @param assignment.thr A percent above which you decide to set as a good sample assignment/HTO, default = 80. #' @return An object of class iCellR #' @examples diff --git a/R/F0058.R b/R/F0058.R index f90412b..19e8a68 100644 --- a/R/F0058.R +++ b/R/F0058.R @@ -35,7 +35,21 @@ run.knetl <- function (x = NULL, do.redux = TRUE, run.iclust = FALSE, return.graph = FALSE) { - # + ##### + if ("iCellR" != class(x)[1]) { + stop("x should be an object of class iCellR") + } + ##### + message("################# IMPORTANT NOTE ##################","") + message(paste(" Zoom is set to:", zoom,"! Make sure it is good for this data.")) + message(" +# For data with less than 5000 cells use a zoom of about 100-200. +# For data with 5000-10000 cells use a zoom of about 100-300. +# For data with 10000-30000 cells use a zoom of about 200-400. +# For data with more than 30000 cells use a zoom of about 400-600. +# A zoom value of 400 and dims = 1:20 is usually good for big data but adjust it for intended resolution.") + message("###################################################","") + ###### start_time1 <- Sys.time() # cluster if(data.type == "pca") { diff --git a/R/F0072.R b/R/F0072.R new file mode 100644 index 0000000..ebbc141 --- /dev/null +++ b/R/F0072.R @@ -0,0 +1,26 @@ +#' Make BED Files +#' +#' This function takes peak marker files and makes the bed files per cluster. +#' @param x Peak marker file. +#' @return Bed files +#' @export +make.bed <- function (x = NULL) { +# get filed + results <- subset(x,select=c(gene,clusters,AvExpInOtherClusters)) + peaks <- as.character(results$gene) + peaks <- (gsub("\\.","_",peaks)) + peaks <- data.frame(do.call('rbind', strsplit(as.character(peaks),'_',fixed=TRUE))) + results <- cbind(peaks,results) +####### + My.clusters <- unique(results$clusters) +####### + for(i in My.clusters){ + dat <- subset(results, results$clusters == i) + dat <- subset(dat,select=c(X1,X2,X3,gene,AvExpInOtherClusters)) + MyName <- paste("peaks_cluster_",i,".bed",sep="") + if(dim(dat)[1] > 0) { + write.table(dat, MyName, sep="\t", quote = FALSE,row.names =FALSE, col.names = FALSE,) + } + } +} + diff --git a/R/F008.R b/R/F008.R index f5956fe..c5e2125 100644 --- a/R/F008.R +++ b/R/F008.R @@ -7,6 +7,10 @@ #' @param top.rank If the method is set to "ranked.glsf", you need to set top number of genes sorted based on global base mean, default = 500. #' @param spike.in.factors A numeric vector of spike-in values with the same cell id order as the main data. #' @param rpm.factor If the norm.method is set to "rpm" the library sizes would be divided by this number, default = 1000 (higher numbers recomanded for bulk RNA-Seq). +#' @param rounding.digits integer indicating the number of decimal places (round) or significant digits (signif) to be used. +#' @param round.num Rounding of Numbers, default = FALSE. +#' @param ATAC.data If TURE, it would normalize ATAC-Seq data and not RNA-Seq, default = FALSE. +#' @param ATAC.filter If TURE, all the cells filtered in RNA-Seq will be filtered in ATAC-Seq. This needs to be done for both data to match, default = TRUE. #' @return An object of class iCellR. #' @examples #' @@ -17,11 +21,22 @@ norm.data <- function (x = NULL, norm.method = "ranked.glsf", top.rank = 500, spike.in.factors = NULL, - rpm.factor = 1000) { + rpm.factor = 1000, + rounding.digits = 3, + round.num = TRUE, + ATAC.data = FALSE, + ATAC.filter = TRUE) { if ("iCellR" != class(x)[1]) { stop("x should be an object of class iCellR") } +####### +# get data RNA DATA <- x@main.data +# get data ATAC + if (ATAC.data == TRUE) { + DATA <- x@atac.main + } +####### if (norm.method == "global.glsf") { libSiz <- colSums(DATA) norm.facts <- as.numeric(libSiz) / mean(as.numeric(libSiz)) @@ -56,9 +71,29 @@ norm.data <- function (x = NULL, normalized <- as.data.frame(sweep(dataMat, 2, norm.facts, `/`)) } ##### - normalized <- round(normalized, digits = 3) - attributes(x)$main.data <- normalized - attributes(x)$norm.factors <- norm.facts + if (round.num == TRUE) { + normalized <- round(normalized, digits = rounding.digits) + } +###### + # get data ATAC + if (ATAC.data == TRUE) { + if (ATAC.filter == TRUE) { + dat = normalized + MyIDsToKeep <- colnames(x@main.data) + normalized <- dat[ , which(names(dat) %in% MyIDsToKeep)] + #### order colnames by the original data + normalized <- as.matrix(normalized) + normalized <- normalized[ , order(match(colnames(normalized),MyIDsToKeep))] + normalized <- as.data.frame(normalized) + } + attributes(x)$atac.main <- normalized + } + # get data ATAC + if (ATAC.data == FALSE) { + attributes(x)$main.data <- normalized + attributes(x)$norm.factors <- norm.facts + } +############ return(x) } diff --git a/man/clust.avg.exp.Rd b/man/clust.avg.exp.Rd index 97c58c5..3635aa1 100644 --- a/man/clust.avg.exp.Rd +++ b/man/clust.avg.exp.Rd @@ -15,7 +15,7 @@ clust.avg.exp( \arguments{ \item{x}{An object of class iCellR.} -\item{data.type}{Choose from "main" and "imputed", default = "main"} +\item{data.type}{Choose from "main", "atac", "atac.imputed" and "imputed", default = "main"} \item{conds.to.avg}{Choose the conditions you want to average, default = NULL (all conditions).} diff --git a/man/findMarkers.Rd b/man/findMarkers.Rd index 03df140..df46fd3 100644 --- a/man/findMarkers.Rd +++ b/man/findMarkers.Rd @@ -19,7 +19,7 @@ findMarkers( \arguments{ \item{x}{An object of class iCellR.} -\item{data.type}{Choose from "main" and "imputed", default = "main"} +\item{data.type}{Choose from "main", "atac", "atac.imputed" and "imputed", default = "main"} \item{pval.test}{Choose from "t.test", "wilcox.test", default = "t.test".} diff --git a/man/gene.plot.Rd b/man/gene.plot.Rd index 62ae690..eba5305 100644 --- a/man/gene.plot.Rd +++ b/man/gene.plot.Rd @@ -41,7 +41,7 @@ gene.plot( \item{conds.to.plot}{Choose the conditions you want to see in the plot, default = NULL (all conditions).} -\item{data.type}{Choose from "main" or "imputed", default = "main".} +\item{data.type}{Choose from "main", "atac, "atac.imputed" and "imputed", default = "main".} \item{box.to.test}{A cluster number so that all the boxes in the box plot would be compared to. If set to "0" the cluster with the highest avrage would be choosen, default = 0.} diff --git a/man/heatmap.gg.plot.Rd b/man/heatmap.gg.plot.Rd index 8e7cc29..6113b69 100644 --- a/man/heatmap.gg.plot.Rd +++ b/man/heatmap.gg.plot.Rd @@ -28,7 +28,7 @@ heatmap.gg.plot( \item{cell.sort}{If FALSE the cells will not be sorted based on their distance, default = TRUE.} -\item{data.type}{Choose from "main" and "imputed", default = "main".} +\item{data.type}{Choose from "main", "atac", atac.imputed and "imputed", default = "main".} \item{cluster.by}{Choose from "clusters" or "none", default = "clusters".} diff --git a/man/hto.anno.Rd b/man/hto.anno.Rd index 703221a..67ffc8b 100644 --- a/man/hto.anno.Rd +++ b/man/hto.anno.Rd @@ -9,7 +9,7 @@ hto.anno(hto.data = "data.frame", cov.thr = 10, assignment.thr = 80) \arguments{ \item{hto.data}{HTO raw data} -\item{cov.thr}{A number which avrage coverage is devided by to set a thershold for low coverage, default = 10.} +\item{cov.thr}{A number which average coverage is divided by to set a threshold for low coverage. For example 10 means it is 10 time less than the average. default = 10.} \item{assignment.thr}{A percent above which you decide to set as a good sample assignment/HTO, default = 80.} } diff --git a/man/make.bed.Rd b/man/make.bed.Rd new file mode 100644 index 0000000..e927886 --- /dev/null +++ b/man/make.bed.Rd @@ -0,0 +1,17 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/F0072.R +\name{make.bed} +\alias{make.bed} +\title{Make BED Files} +\usage{ +make.bed(x = NULL) +} +\arguments{ +\item{x}{Peak marker file.} +} +\value{ +Bed files +} +\description{ +This function takes peak marker files and makes the bed files per cluster. +} diff --git a/man/norm.data.Rd b/man/norm.data.Rd index 70a12af..aa9d31e 100644 --- a/man/norm.data.Rd +++ b/man/norm.data.Rd @@ -9,7 +9,11 @@ norm.data( norm.method = "ranked.glsf", top.rank = 500, spike.in.factors = NULL, - rpm.factor = 1000 + rpm.factor = 1000, + rounding.digits = 3, + round.num = TRUE, + ATAC.data = FALSE, + ATAC.filter = TRUE ) } \arguments{ @@ -23,6 +27,14 @@ Choose from "global.glsf", "ranked.glsf","spike.in" or no.norm, default = "ranke \item{spike.in.factors}{A numeric vector of spike-in values with the same cell id order as the main data.} \item{rpm.factor}{If the norm.method is set to "rpm" the library sizes would be divided by this number, default = 1000 (higher numbers recomanded for bulk RNA-Seq).} + +\item{rounding.digits}{integer indicating the number of decimal places (round) or significant digits (signif) to be used.} + +\item{round.num}{Rounding of Numbers, default = FALSE.} + +\item{ATAC.data}{If TURE, it would normalize ATAC-Seq data and not RNA-Seq, default = FALSE.} + +\item{ATAC.filter}{If TURE, all the cells filtered in RNA-Seq will be filtered in ATAC-Seq. This needs to be done for both data to match, default = TRUE.} } \value{ An object of class iCellR. diff --git a/man/run.impute.Rd b/man/run.impute.Rd index 94a4b45..5d38c51 100644 --- a/man/run.impute.Rd +++ b/man/run.impute.Rd @@ -9,6 +9,9 @@ run.impute( imp.method = "iCellR.imp", dims = 1:10, nn = 10, + ATAC.data = FALSE, + rounding.digits = 4, + round.num = TRUE, data.type = "pca", genes = "all_genes", k = 10, @@ -32,6 +35,12 @@ run.impute( \item{nn}{Number of neighboring cells to find, default = 10.} +\item{ATAC.data}{If TURE, it would normalize ATAC-Seq data and not RNA-Seq, default = FALSE.} + +\item{rounding.digits}{integer indicating the number of decimal places (round) or significant digits (signif) to be used.} + +\item{round.num}{Rounding of Numbers, default = FALSE.} + \item{data.type}{Choose between "tsne", "pca", "umap", "diffusion", "knetl", default = "pca".} \item{genes}{character or integer vector, default: NULL vector of column names or column indices for which to return smoothed data If 'all_genes' or NULL, the entire smoothed matrix is returned} From 4cf6119dab0dab08c6000039ee097a43c5f89a04 Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Tue, 27 Apr 2021 14:28:57 -0400 Subject: [PATCH 17/74] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index db84961..7cf021b 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ [![Build Status](https://travis-ci.com/rezakj/iCellR.svg?branch=master)](https://travis-ci.com/rezakj/iCellR) # iCellR -iCellR is an interactive R package to work with high-throughput single cell sequencing technologies (i.e scRNA-seq, scVDJ-seq, ST and CITE-seq). +iCellR is an interactive R package to work with high-throughput single cell sequencing technologies (i.e scRNA-seq, scVDJ-seq, scATAC-seq, CITE-Seq and Spatial Transcriptomics (ST)). ### News (July 2020): See iCellR version 1.5.5 with new cell cycle analysis for G0, G1S, G2M, M, G1M and S [phase](https://genome.med.nyu.edu/results/external/iCellR/example1/All_cellcycle.png), Pseudotime Abstract KNetL map [(PAK map)](https://genome.med.nyu.edu/results/external/iCellR/example1/pseudotime.KNetL.png) and gene-gene [correlations](https://genome.med.nyu.edu/results/external/iCellR/example1/gene-gene.correlation.png). See below for how to. From 24e81f199da3ad63f12f2f5b91fde3f5f46e11a0 Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Tue, 27 Apr 2021 14:33:49 -0400 Subject: [PATCH 18/74] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 7cf021b..1ce28b2 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,8 @@ # iCellR iCellR is an interactive R package to work with high-throughput single cell sequencing technologies (i.e scRNA-seq, scVDJ-seq, scATAC-seq, CITE-Seq and Spatial Transcriptomics (ST)). +### News (April 2021): Use iCellR version 1.6.4 for scATAC-seq and Spatial Transcriptomics (ST). Use function i.score for scoring (scoring cells based on genes of your interest) methods (i.e. tirosh, mean, sum, gsva, ssgsea, zscore and plage). + ### News (July 2020): See iCellR version 1.5.5 with new cell cycle analysis for G0, G1S, G2M, M, G1M and S [phase](https://genome.med.nyu.edu/results/external/iCellR/example1/All_cellcycle.png), Pseudotime Abstract KNetL map [(PAK map)](https://genome.med.nyu.edu/results/external/iCellR/example1/pseudotime.KNetL.png) and gene-gene [correlations](https://genome.med.nyu.edu/results/external/iCellR/example1/gene-gene.correlation.png). See below for how to. ### News (May 2020): see our dimensionality reduction called [KNetL map](https://genome.med.nyu.edu/results/external/iCellR/example1/Allclusts.Annotated.png) drawing (pronounced like "nettle"). [KNetL](https://www.biorxiv.org/content/10.1101/2020.05.05.078550v1.full) map is capable of zooming and shows a lot more details compared to tSNE and UMAP. From 4c39cafdb984ea24e78995d5c81963cef899d714 Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Tue, 27 Apr 2021 15:03:37 -0400 Subject: [PATCH 19/74] Update README.md --- README.md | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 1ce28b2..2c6d620 100644 --- a/README.md +++ b/README.md @@ -429,13 +429,18 @@ my.obj <- run.umap(my.obj, dims = 1:10) my.obj <- run.knetl(my.obj, dims = 1:20, zoom = 110, dim.redux = "umap") # (Important note!) don't forget to set the zoom in the right range ########################### IMPORTANT NOTE ######################################## -#### Because KNetl has a very high resolution it's best to use a dim of 20 (this usually works best for most data) #### For zooming use the zoom option. -# For data with less than 5000 cells use a zoom of about 100-200. +# For data with less than 5000 cells use a zoom of about 100-200. # For data with 5000-10000 cells use a zoom of about 100-300. -# For data with 10000-30000 cells use a zoom of about 200-400. +# For data with 10000-30000 cells use a zoom of about 200-500. # For data with more than 30000 cells use a zoom of about 400-600. -#### A zoom value of 400 is usually good for big data but adjust it for intended resolution. +# zoom 400 is usually good for big data but adjust for intended resolution. +# Lower number for zoom in higher for zoom out (its reverse). +# dims = 1:20 is generally good for most data. +# other parameters are best as default. + + ***KNetL map is very dynamic with zoom and dims*** + #### Just like a microscope, you need to zoom to see the intended amount of details. #### Here we use a zoom of 100 or 110 but this might not be ideal for your data. #### example: # my.obj <- run.knetl(my.obj, dims = 1:20, zoom = 400) From c48e914c5645cbf953f49b8da867ff61189eae2b Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Thu, 20 May 2021 12:07:39 -0400 Subject: [PATCH 20/74] Update README.md --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 2c6d620..f4ee684 100644 --- a/README.md +++ b/README.md @@ -428,19 +428,19 @@ my.obj <- run.umap(my.obj, dims = 1:10) # Because knetl has a very high resolution it's best to use a dim of 20 (this usually works best for most data) my.obj <- run.knetl(my.obj, dims = 1:20, zoom = 110, dim.redux = "umap") # (Important note!) don't forget to set the zoom in the right range -########################### IMPORTANT NOTE ######################################## -#### For zooming use the zoom option. -# For data with less than 5000 cells use a zoom of about 100-200. +########################## IMPORTANT DISCLAIMER NOTE ########################### + *** KNetL map is very dynamic with zoom and dims! *** + *** Therefore it needs to be adjusted! *** +# For data with less than 1000 cells use a zoom of about 5-50. +# For data with 1000-5000 cells use a zoom of about 50-200. # For data with 5000-10000 cells use a zoom of about 100-300. # For data with 10000-30000 cells use a zoom of about 200-500. # For data with more than 30000 cells use a zoom of about 400-600. # zoom 400 is usually good for big data but adjust for intended resolution. -# Lower number for zoom in higher for zoom out (its reverse). +# Lower number for zoom in and higher for zoom out (its reverse). # dims = 1:20 is generally good for most data. # other parameters are best as default. - ***KNetL map is very dynamic with zoom and dims*** - #### Just like a microscope, you need to zoom to see the intended amount of details. #### Here we use a zoom of 100 or 110 but this might not be ideal for your data. #### example: # my.obj <- run.knetl(my.obj, dims = 1:20, zoom = 400) From 26706dc85a415401ffe51f076eaf8ccc4d463ba4 Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Mon, 7 Jun 2021 11:01:18 -0400 Subject: [PATCH 21/74] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f4ee684..85aa2a1 100644 --- a/README.md +++ b/README.md @@ -508,7 +508,7 @@ In this function we provide a variety of many other options for you to explore t | ------------- | ------------- | ------------- | | ward.D, ward.D2, single, complete, average, mcquitty, median, centroid, kmeans| euclidean, maximum, manhattan, canberra, binary, minkowski or NULL | kl, ch, hartigan, ccc, scott, marriot, trcovw, tracew, friedman, rubin, cindex, db, silhouette, duda, pseudot2, beale, ratkowsky, ball, ptbiserial, gap, frey, mcclain, gamma, gplus, tau, dunn, hubert, sdindex, dindex, sdbw | -### Conventionally people cluster based on PCA data however because KNetL map is more powerful we recommend clustering based on KNetL map. +### Conventionally people cluster based on PCA data (usually first 10 dimensions) however you have the option of choosing tSNA, UMAP and KNetL map as well. If you have adjusted your KNetL map and are confident about the results we recommend clustering based on KNetL map. This is one of the harder parts of the analysis and sometimes you need to adjust your clustering based on marker genes. This means you might need to merge some clusters, gate (see our cell gating tools) or try different sensitivities to find more or less communities. From 84d5ddcc2defa7c8c415cda148bff0b0ea21853f Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Mon, 7 Jun 2021 11:14:30 -0400 Subject: [PATCH 22/74] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 85aa2a1..f0c0fe2 100644 --- a/README.md +++ b/README.md @@ -113,7 +113,7 @@ To see the help page for each function use question mark as: - Aggregate data -Conditions in iCellR are set in the header of the data and are separated by an underscore (_). Let's say you want to merge multiple datasets and run iCellR in aggregate mode. Here’s an example: I divided this sample into three sets and then aggregate them into one matrix. +## Conditions in iCellR are set or shown in the column names of the data and are separated by an underscore (_). Let's say you want to merge multiple datasets (data frames/matrices) into one file and run iCellR in aggregate mode (all samples together). You can do so using "data.aggregation" function. Here’s an example: I divided this sample into four datasets and then aggregated them into one matrix. Here we are assuming you have four samples (e.g. WT,KO,Ctrl,KD). In this way, iCellR will know you have 4 samples for the rest of the analysis (e.g. batch alignment, plots, DE, etc.). ```r dim(my.data) From fdb8d103fe62c391b19cdd3fc059ad48751c0e8c Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Mon, 7 Jun 2021 11:15:07 -0400 Subject: [PATCH 23/74] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f0c0fe2..afed3b2 100644 --- a/README.md +++ b/README.md @@ -113,7 +113,7 @@ To see the help page for each function use question mark as: - Aggregate data -## Conditions in iCellR are set or shown in the column names of the data and are separated by an underscore (_). Let's say you want to merge multiple datasets (data frames/matrices) into one file and run iCellR in aggregate mode (all samples together). You can do so using "data.aggregation" function. Here’s an example: I divided this sample into four datasets and then aggregated them into one matrix. Here we are assuming you have four samples (e.g. WT,KO,Ctrl,KD). In this way, iCellR will know you have 4 samples for the rest of the analysis (e.g. batch alignment, plots, DE, etc.). +## Conditions in iCellR are set or shown in the column names of the data and are separated by an underscore ( "_" ). Let's say you want to merge multiple datasets (data frames/matrices) into one file and run iCellR in aggregate mode (all samples together). You can do so using "data.aggregation" function. Here’s an example: I divided this sample into four datasets and then aggregated them into one matrix. Here we are assuming you have four samples (e.g. WT,KO,Ctrl,KD). In this way, iCellR will know you have 4 samples for the rest of the analysis (e.g. batch alignment, plots, DE, etc.). ```r dim(my.data) From 69c094e941918360431c7d4a68e199118fe19bcf Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Mon, 7 Jun 2021 11:15:44 -0400 Subject: [PATCH 24/74] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index afed3b2..84252c1 100644 --- a/README.md +++ b/README.md @@ -113,7 +113,7 @@ To see the help page for each function use question mark as: - Aggregate data -## Conditions in iCellR are set or shown in the column names of the data and are separated by an underscore ( "_" ). Let's say you want to merge multiple datasets (data frames/matrices) into one file and run iCellR in aggregate mode (all samples together). You can do so using "data.aggregation" function. Here’s an example: I divided this sample into four datasets and then aggregated them into one matrix. Here we are assuming you have four samples (e.g. WT,KO,Ctrl,KD). In this way, iCellR will know you have 4 samples for the rest of the analysis (e.g. batch alignment, plots, DE, etc.). +## Conditions in iCellR are set or shown in the column names of the data and are separated by an underscore "_" sign. Let's say you want to merge multiple datasets (data frames/matrices) into one file and run iCellR in aggregate mode (all samples together). You can do so using "data.aggregation" function. Here’s an example: I divided this sample into four datasets and then aggregated them into one matrix. Here we are assuming you have four samples (e.g. WT,KO,Ctrl,KD). In this way, iCellR will know you have 4 samples for the rest of the analysis (e.g. batch alignment, plots, DE, etc.). ```r dim(my.data) From bfeef17ad18e824ebf7148ec487915aa3cf9b0ca Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Mon, 7 Jun 2021 11:19:40 -0400 Subject: [PATCH 25/74] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 84252c1..9af7195 100644 --- a/README.md +++ b/README.md @@ -271,7 +271,7 @@ This step is optional and is for having the same number of cells for each condit - Normalize data -You have a few options to normalize your data based on your study. You can also normalize your data using tools other than iCellR and import your data to iCellR. We recommend "ranked.glsf" normalization for most single cell studies. This normalization is great for fixing matrixes with lots of zeros and because it's geometric it is great for fixing for batch effects, as long as all the data is aggregated into one file (to aggregate your data see "aggregating data" section above). +You have a few options to normalize your data based on your study. You can also normalize your data using tools other than iCellR and import your data to iCellR. We recommend "ranked.glsf" normalization for most single cell studies. This normalization is great for fixing matrixes with lots of zeros and because it's geometric it will reduce some of batch differences in the library sizes, as long as all the data is aggregated into one file (to aggregate your data see "aggregating data" section above). ```r my.obj <- norm.data(my.obj, From d79089b202e107792d423ce0d386fefa4c658366 Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Mon, 7 Jun 2021 11:24:40 -0400 Subject: [PATCH 26/74] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9af7195..eb66d3d 100644 --- a/README.md +++ b/README.md @@ -271,7 +271,7 @@ This step is optional and is for having the same number of cells for each condit - Normalize data -You have a few options to normalize your data based on your study. You can also normalize your data using tools other than iCellR and import your data to iCellR. We recommend "ranked.glsf" normalization for most single cell studies. This normalization is great for fixing matrixes with lots of zeros and because it's geometric it will reduce some of batch differences in the library sizes, as long as all the data is aggregated into one file (to aggregate your data see "aggregating data" section above). +## You have a few options to normalize your data based on your study. You can also normalize your data using tools other than iCellR and import your data to iCellR. We recommend "ranked.glsf" normalization for most single cell studies. This normalization is great for fixing matrixes with lots of zeros and because it's geometric it will reduce some of batch differences in the library sizes, as long as all the data is aggregated into one file (to aggregate your data see "aggregating data" section above). GLSF stands for Geometric Library Size Factor, this is very similar to the normalization done by (DESeq2)[https://bioconductor.org/packages/release/bioc/html/DESeq2.html] and the ranked part would take the sum of the top most expressed genes as your library size instead of the full LB size which is to help resduce some of the drop out effects on normalization. ```r my.obj <- norm.data(my.obj, From eb149a8891a8fba2c044a440d24775cae1d604f4 Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Mon, 7 Jun 2021 11:25:14 -0400 Subject: [PATCH 27/74] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index eb66d3d..f027fe1 100644 --- a/README.md +++ b/README.md @@ -271,7 +271,7 @@ This step is optional and is for having the same number of cells for each condit - Normalize data -## You have a few options to normalize your data based on your study. You can also normalize your data using tools other than iCellR and import your data to iCellR. We recommend "ranked.glsf" normalization for most single cell studies. This normalization is great for fixing matrixes with lots of zeros and because it's geometric it will reduce some of batch differences in the library sizes, as long as all the data is aggregated into one file (to aggregate your data see "aggregating data" section above). GLSF stands for Geometric Library Size Factor, this is very similar to the normalization done by (DESeq2)[https://bioconductor.org/packages/release/bioc/html/DESeq2.html] and the ranked part would take the sum of the top most expressed genes as your library size instead of the full LB size which is to help resduce some of the drop out effects on normalization. +## You have a few options to normalize your data based on your study. You can also normalize your data using tools other than iCellR and import your data to iCellR. We recommend "ranked.glsf" normalization for most single cell studies. This normalization is great for fixing matrixes with lots of zeros and because it's geometric it will reduce some of batch differences in the library sizes, as long as all the data is aggregated into one file (to aggregate your data see "aggregating data" section above). GLSF stands for Geometric Library Size Factor, this is very similar to the normalization done by [DESeq2](https://bioconductor.org/packages/release/bioc/html/DESeq2.html) and the ranked part would take the sum of the top most expressed genes as your library size instead of the full LB size which is to help resduce some of the drop out effects on normalization. ```r my.obj <- norm.data(my.obj, From a34f21cdf0bf0e59679016bbbd004fe07771ac1f Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Mon, 7 Jun 2021 11:33:54 -0400 Subject: [PATCH 28/74] Update README.md --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index f027fe1..b750532 100644 --- a/README.md +++ b/README.md @@ -306,9 +306,7 @@ my.obj <- norm.data(my.obj, - Scale data (optional) -iCellR dose not need this step as it scales the data when they need to be scaled on the fly; like for plotting or PCA. -It is important to use the untansformed data for differential expression analysis to calculate the accurate fold changes. -If you run this function the scaled data will be saved in different slot for you to download for plotting but will not be use by iCellR. +iCellR does not need this step as it scales the data when they need to be scaled on the fly; like for plotting or running PCA. This is because, it is important to use the untransformed data for differential expression analysis to calculate the accurate/true fold changes. If you run this function the scaled data will replace the main data for this reason and instead will be saved in different data slot in the object for you to download if you need it for plotting or other reasons. ```r # my.obj <- data.scale(my.obj) From bc43a8b292fcd6ac15a9fd01d58519553e313f2e Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Mon, 7 Jun 2021 11:35:59 -0400 Subject: [PATCH 29/74] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b750532..6ecdf6a 100644 --- a/README.md +++ b/README.md @@ -336,7 +336,7 @@ head(my.obj@gene.data[order(my.obj@gene.data$numberOfCells, decreasing = T),]) - Make a gene model for clustering -It's best to always to avoid global clustering and use a set of model genes. In bulk RNA-seq data it is very common to cluster the samples based on top 500 genes ranked by base mean, this is to reduce the noise. In scRNA-seq data, it's great to do so as well. This coupled with our ranked.glsf normalization is good for matrices with a lot of zeros. You can also use your set of genes as a model rather than making one. +This function will help you find a good number of genes to use for running PCA. ```r # See model plot From 9cef3bc1e8525055dfde976c77781ac5b3d94090 Mon Sep 17 00:00:00 2001 From: Khodadadi-Jamayran Date: Mon, 7 Jun 2021 12:01:48 -0400 Subject: [PATCH 30/74] 1.6.4 --- DESCRIPTION | 4 ++-- R/F00100.R | 2 +- R/F0058.R | 21 +++++++++++++++------ R/F0071.R | 2 +- man/i.score.Rd | 2 +- 5 files changed, 20 insertions(+), 11 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index d544417..3a859e8 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -13,7 +13,7 @@ Authors@R: c( person(given = "Aristotelis", family = "Tsirigos",role = c('aut','ctb'), comment = c(ORCID = '0000-0002-7512-8477')) ) Maintainer: Alireza Khodadadi-Jamayran -Description: A toolkit that allows scientists to work with data from single cell sequencing technologies such as scRNA-seq, scVDJ-seq and CITE-Seq. Single (i) Cell R package ('iCellR') provides unprecedented flexibility at every step of the analysis pipeline, including normalization, clustering, dimensionality reduction, imputation, visualization, and so on. Users can design both unsupervised and supervised models to best suit their research. In addition, the toolkit provides 2D and 3D interactive visualizations, differential expression analysis, filters based on cells, genes and clusters, data merging, normalizing for dropouts, data imputation methods, correcting for batch differences, pathway analysis, tools to find marker genes for clusters and conditions, predict cell types and pseudotime analysis. See Khodadadi-Jamayran, et al (2020) and Khodadadi-Jamayran, et al (2020) for more details. +Description: A toolkit that allows scientists to work with data from single cell sequencing technologies such as scRNA-seq, scVDJ-seq, scATAC-seq, CITE-Seq and Spatial Transcriptomics (ST). Single (i) Cell R package ('iCellR') provides unprecedented flexibility at every step of the analysis pipeline, including normalization, clustering, dimensionality reduction, imputation, visualization, and so on. Users can design both unsupervised and supervised models to best suit their research. In addition, the toolkit provides 2D and 3D interactive visualizations, differential expression analysis, filters based on cells, genes and clusters, data merging, normalizing for dropouts, data imputation methods, correcting for batch differences, pathway analysis, tools to find marker genes for clusters and conditions, predict cell types and pseudotime analysis. See Khodadadi-Jamayran, et al (2020) and Khodadadi-Jamayran, et al (2020) for more details. Depends: R (>= 3.3.0), ggplot2, plotly Imports: Matrix, Rtsne, gridExtra, ggrepel, ggpubr, scatterplot3d, RColorBrewer, knitr, NbClust, shiny, pheatmap, ape, ggdendro, @@ -27,7 +27,7 @@ RoxygenNote: 7.1.1 BugReports: https://github.com/rezakj/iCellR/issues URL: https://github.com/rezakj/iCellR NeedsCompilation: yes -Packaged: 2021-04-27 16:41:35 UTC; khodaa01 +Packaged: 2021-06-07 15:57:39 UTC; khodaa01 Author: Alireza Khodadadi-Jamayran [aut, cre] (), Joseph Pucella [aut, ctb] (), diff --git a/R/F00100.R b/R/F00100.R index 9c0ef8c..562ea29 100644 --- a/R/F00100.R +++ b/R/F00100.R @@ -162,7 +162,7 @@ utils::globalVariables(c("%>%", # gg.cor.R | F0055.R # globalVariables.R | F0056.R # hto.anno.R | F0057.R -# iNet.R | F0058.R +# run.knetl.R | F0058.R # iba.R | F0059.R # iclust.R | F0060.R # k.myImp.R | F0061.R diff --git a/R/F0058.R b/R/F0058.R index 19e8a68..48ee388 100644 --- a/R/F0058.R +++ b/R/F0058.R @@ -40,14 +40,22 @@ run.knetl <- function (x = NULL, stop("x should be an object of class iCellR") } ##### - message("################# IMPORTANT NOTE ##################","") + message("############ IMPORTANT DISCLAIMER NOTE #############","") message(paste(" Zoom is set to:", zoom,"! Make sure it is good for this data.")) message(" -# For data with less than 5000 cells use a zoom of about 100-200. + *** KNetL map is very dynamic with zoom and dims! *** + *** Therefore it needs to be adjusted! *** +# For data with less than 1000 cells use a zoom of about 5-50. +# For data with 1000-5000 cells use a zoom of about 50-200. # For data with 5000-10000 cells use a zoom of about 100-300. -# For data with 10000-30000 cells use a zoom of about 200-400. +# For data with 10000-30000 cells use a zoom of about 200-500. # For data with more than 30000 cells use a zoom of about 400-600. -# A zoom value of 400 and dims = 1:20 is usually good for big data but adjust it for intended resolution.") +# zoom 400 is usually good for big data but adjust for intended resolution. +# Lower number for zoom in and higher for zoom out (its reverse). +# dims = 1:20 is generally good for most data. +# other parameters are best as default. + + ") message("###################################################","") ###### start_time1 <- Sys.time() @@ -167,8 +175,6 @@ run.knetl <- function (x = NULL, } } ################################## - # png('network_1.png',width = 30, height = 30, units = 'in', res = 300) - ####### end_time1 <- Sys.time() Time = difftime(end_time1,start_time1,units = "mins") Time = round(as.numeric(Time),digits = 2) @@ -217,3 +223,6 @@ run.knetl <- function (x = NULL, return(g) } } + + + diff --git a/R/F0071.R b/R/F0071.R index f6451a7..edb819f 100644 --- a/R/F0071.R +++ b/R/F0071.R @@ -5,7 +5,7 @@ #' @param data.type Choose from "raw.data" or "main.data", "imputed.data", default = "main.data". #' @param scoring.List Genes that are used as a marker for phases. #' @param return.stats Return the data or object. If FALSE the object would be returned. -#' @param scoring.method Choose from "sum","mean" or "tirosh" for scoring method. See: https://science.sciencemag.org/content/352/6282/189 +#' @param scoring.method Choose from "tirosh (Tirosh, et. al. 2016), mean, sum, gsva, ssgsea, zscore and plage. , default = "tirosh". See: https://science.sciencemag.org/content/352/6282/189 #' @return The data frame object #' @importFrom Hmisc cut2 #' @export diff --git a/man/i.score.Rd b/man/i.score.Rd index 8697f1f..f7ed5ea 100644 --- a/man/i.score.Rd +++ b/man/i.score.Rd @@ -21,7 +21,7 @@ i.score( \item{return.stats}{Return the data or object. If FALSE the object would be returned.} -\item{scoring.method}{Choose from "sum","mean" or "tirosh" for scoring method. See: https://science.sciencemag.org/content/352/6282/189} +\item{scoring.method}{Choose from "tirosh (Tirosh, et. al. 2016), mean, sum, gsva, ssgsea, zscore and plage. , default = "tirosh". See: https://science.sciencemag.org/content/352/6282/189} } \value{ The data frame object From fad2862933cf335ca053244ae32c66faa2742c1c Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Tue, 8 Jun 2021 11:58:57 -0400 Subject: [PATCH 31/74] Update .travis.yml --- .travis.yml | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/.travis.yml b/.travis.yml index 8d240c7..e363703 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,6 +5,7 @@ sudo: required cache: packages os: + - linux - osx r: @@ -16,4 +17,28 @@ matrix: - r: devel os: osx +env: + global: + - _R_CHECK_FORCE_SUGGESTS_=FALSE + - ASAN="-fsanitize=address -fno-omit-frame-pointer" + - LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib + - HDF5_VERSION=1.8.17 + - HDF5_RELEASE_URL="https://support.hdfgroup.org/ftp/HDF5/releases" + +before_install: + - chmod +x travis_setup.sh + - ./travis_setup.sh + +addons: + apt: + packages: + - subversion + - autoconf + - build-essential + - libtool + - libmagick++-dev + homebrew: + packages: + - libgit2 + warnings_are_errors: false From 85a8a034e4e21b57615fd59a3f8cf0522f424817 Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Tue, 8 Jun 2021 12:02:41 -0400 Subject: [PATCH 32/74] Delete .travis.yml --- .travis.yml | 44 -------------------------------------------- 1 file changed, 44 deletions(-) delete mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index e363703..0000000 --- a/.travis.yml +++ /dev/null @@ -1,44 +0,0 @@ -# R for travis: see documentation at https://docs.travis-ci.com/user/languages/r - -language: r -sudo: required -cache: packages - -os: - - linux - - osx - -r: - - release - - devel - -matrix: - exclude: - - r: devel - os: osx - -env: - global: - - _R_CHECK_FORCE_SUGGESTS_=FALSE - - ASAN="-fsanitize=address -fno-omit-frame-pointer" - - LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib - - HDF5_VERSION=1.8.17 - - HDF5_RELEASE_URL="https://support.hdfgroup.org/ftp/HDF5/releases" - -before_install: - - chmod +x travis_setup.sh - - ./travis_setup.sh - -addons: - apt: - packages: - - subversion - - autoconf - - build-essential - - libtool - - libmagick++-dev - homebrew: - packages: - - libgit2 - -warnings_are_errors: false From 89cb4ec06fc9adbb7b7e01a297fbc121082528ef Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Tue, 8 Jun 2021 12:02:53 -0400 Subject: [PATCH 33/74] Update README.md --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 6ecdf6a..4b98c2b 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,6 @@ [![CRAN Version](https://www.r-pkg.org/badges/version/iCellR)](https://cran.r-project.org/package=iCellR) [![CRAN Downloads](https://cranlogs.r-pkg.org/badges/iCellR)](https://cran.r-project.org/package=iCellR) [![License: GPL v2](https://img.shields.io/badge/License-GPL%20v2-blue.svg)](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html) -[![Build Status](https://travis-ci.com/rezakj/iCellR.svg?branch=master)](https://travis-ci.com/rezakj/iCellR) # iCellR iCellR is an interactive R package to work with high-throughput single cell sequencing technologies (i.e scRNA-seq, scVDJ-seq, scATAC-seq, CITE-Seq and Spatial Transcriptomics (ST)). From fcbdeb8802c9cc7723f070bc421c9049e452820e Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Wed, 9 Jun 2021 12:19:00 -0400 Subject: [PATCH 34/74] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4b98c2b..d5dfcea 100644 --- a/README.md +++ b/README.md @@ -505,7 +505,7 @@ In this function we provide a variety of many other options for you to explore t | ------------- | ------------- | ------------- | | ward.D, ward.D2, single, complete, average, mcquitty, median, centroid, kmeans| euclidean, maximum, manhattan, canberra, binary, minkowski or NULL | kl, ch, hartigan, ccc, scott, marriot, trcovw, tracew, friedman, rubin, cindex, db, silhouette, duda, pseudot2, beale, ratkowsky, ball, ptbiserial, gap, frey, mcclain, gamma, gplus, tau, dunn, hubert, sdindex, dindex, sdbw | -### Conventionally people cluster based on PCA data (usually first 10 dimensions) however you have the option of choosing tSNA, UMAP and KNetL map as well. If you have adjusted your KNetL map and are confident about the results we recommend clustering based on KNetL map. +### Conventionally people cluster based on PCA data (usually first 10 dimensions) however you have the option of choosing tSNE, UMAP and KNetL map dimensions as well. If you have adjusted your KNetL map and are confident about the results we recommend clustering based on KNetL map. This is one of the harder parts of the analysis and sometimes you need to adjust your clustering based on marker genes. This means you might need to merge some clusters, gate (see our cell gating tools) or try different sensitivities to find more or less communities. From 66f733756f1f9272d83d3e282c02df9bc4755c70 Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Mon, 9 Aug 2021 16:44:20 -0400 Subject: [PATCH 35/74] Update README.md --- README.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index d5dfcea..066272c 100644 --- a/README.md +++ b/README.md @@ -23,10 +23,9 @@ iCellR Viewer (web GUI app): https://compbio.nyumc.org/icellr/ If you are using FlowJo or SeqGeq, they have made plugins for iCellR and other single cell tools: https://www.flowjo.com/exchange/#/ (list of all plugins) and https://www.flowjo.com/exchange/#/plugin/profile?id=34 (iCellR plugin). [SeqGeq DE tutorial](https://www.youtube.com/watch?v=gXFmWRpdwow) -For citing iCellR use these: -- Citation for batch alignment and imputation: https://www.biorxiv.org/content/10.1101/2020.03.31.019109v1.full -- Citation for KNetL map: https://www.biorxiv.org/content/10.1101/2020.05.05.078550v1.full -- iCellR publications: [PMID 31744829](https://www.ncbi.nlm.nih.gov/pubmed/31744829) (scRNA-seq), [PMID: 31934613](https://www.ncbi.nlm.nih.gov/pubmed/31934613) (bulk RNA-seq from TCGA), [PMID: 32550269](https://pubmed.ncbi.nlm.nih.gov/32550269/) (scVDJ-seq) +For citing iCellR use this [PMID: 34353854](https://cancerdiscovery.aacrjournals.org/content/early/2021/07/28/2159-8290.CD-21-0369) + +iCellR publications: [PMID 31744829](https://www.ncbi.nlm.nih.gov/pubmed/31744829) (scRNA-seq), [PMID: 31934613](https://www.ncbi.nlm.nih.gov/pubmed/31934613) (bulk RNA-seq from TCGA), [PMID: 32550269](https://pubmed.ncbi.nlm.nih.gov/32550269/) (scVDJ-seq), [PMID: 34135081](https://jasn.asnjournals.org/content/32/8/1987), [PMID: 33593073](https://www.ahajournals.org/doi/10.1161/CIRCRESAHA.120.317914) ### Single (i) Cell R package (iCellR) From 879ac988504c27c13d2ea0f33d76022f5db90989 Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Thu, 26 Aug 2021 15:42:02 -0400 Subject: [PATCH 36/74] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 066272c..e4ec8e1 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ # iCellR iCellR is an interactive R package to work with high-throughput single cell sequencing technologies (i.e scRNA-seq, scVDJ-seq, scATAC-seq, CITE-Seq and Spatial Transcriptomics (ST)). -### News (April 2021): Use iCellR version 1.6.4 for scATAC-seq and Spatial Transcriptomics (ST). Use function i.score for scoring (scoring cells based on genes of your interest) methods (i.e. tirosh, mean, sum, gsva, ssgsea, zscore and plage). +### News (April 2021): Use iCellR version 1.6.4 for scATAC-seq and Spatial Transcriptomics (ST). Use the i.score function for scoring (scoring cells based on gene signatures) methods (i.e. tirosh, mean, sum, gsva, ssgsea, zscore and plage). ### News (July 2020): See iCellR version 1.5.5 with new cell cycle analysis for G0, G1S, G2M, M, G1M and S [phase](https://genome.med.nyu.edu/results/external/iCellR/example1/All_cellcycle.png), Pseudotime Abstract KNetL map [(PAK map)](https://genome.med.nyu.edu/results/external/iCellR/example1/pseudotime.KNetL.png) and gene-gene [correlations](https://genome.med.nyu.edu/results/external/iCellR/example1/gene-gene.correlation.png). See below for how to. From 49cc5c43c78b9312a490c2bcc1b714366645c98f Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Tue, 7 Sep 2021 18:33:47 -0400 Subject: [PATCH 37/74] Update README.md --- README.md | 44 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e4ec8e1..987a37d 100644 --- a/README.md +++ b/README.md @@ -2931,7 +2931,7 @@ heatmap.gg.plot(my.obj, gene = MyGenes, interactive = F, cluster.by = "clusters" dev.off() ``` -Work on scATAC data +Work on scATAC data (normalize and find marker peaks for each cluster) ```r # normalize ACAT @@ -3004,12 +3004,34 @@ my.obj <- run.impute(my.obj,data.type = "knetl", nn = 10, ATAC.data = FALSE) png('heatmap_gg_peaks.png', width = 10, height = 10, units = 'in', res = 300) heatmap.gg.plot(my.obj, gene = MyGenes, interactive = F, cluster.by = "clusters",cell.sort = F, conds.to.plot = NULL, data.type = "atac.imputed") dev.off() + +## you can also find avarage peak intensity per cluster + +my.obj <- clust.avg.exp(my.obj, data.type = "atac") +head(my.obj@clust.avg) + +#gene cluster_1 cluster_2 ... +#chr1.100037799.100038931 0.38238731 0.36750000 ... +#chr1.100132733.100133298 0.11195725 1.13593827 ... +#chr1.100249637.100250160 0.09851425 0.09511728 ... +#chr1.100265992.100266479 0.06768394 0.17707407 ... +#chr1.10032488.10033387 0.35273705 0.14885802 ... +#chr1.100352150.100352921 0.12006088 0.00000000 ... + +# find out which cluster has the highest number + +dat <- as.data.frame(t((my.obj@clust.avg)[,-1])) +dat <- hto.anno(hto.data = dat) + +head(dat$assignment.annotatio) +#[1] cluster_1 cluster_2 cluster_4 cluster_2 cluster_3 cluster_4 +#8 Levels: cluster_1 cluster_2 cluster_3 cluster_4 cluster_5 ... cluster_8 ``` Peak analysis ```r -# make bed file per cluster +# make a bed file per cluster from the marker.peaks file you made up here make.bed(marker.peaks) # load packages @@ -3070,8 +3092,26 @@ lapply(1:length(genes), function(i) write.table(genes[[i]], ``` +Merging scATAC files with different intervals (as dipicted in bedtools website) + +

+ +

+ +``` +# Let's say you have 3 files that you need to merege +# example file +head(File1)[1:3] +# AAACAGCCAAGTGAAC.1 AAACAGCCACTGACCG.1 AAACAGCCATGATTGT.1 +#chr1.181218.181695 0 0 1 +#chr1.191296.191699 0 0 0 +#chr1.629770.630129 0 0 0 +#chr1.633806.634251 0 0 0 +#chr1.778422.779040 0 0 0 +#chr1.827306.827702 0 0 0 +``` From 3d4e206febe16b365df54621fe14d191cb34f771 Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Tue, 7 Sep 2021 19:20:42 -0400 Subject: [PATCH 38/74] Update README.md --- README.md | 131 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 131 insertions(+) diff --git a/README.md b/README.md index 987a37d..be6ac19 100644 --- a/README.md +++ b/README.md @@ -3111,6 +3111,137 @@ head(File1)[1:3] #chr1.778422.779040 0 0 0 #chr1.827306.827702 0 0 0 +# get the row names from each file and concatenate them as below: + +f1 <- row.names(File1) +f2 <- row.names(File2) +f3 <- row.names(File3) + +all.peaks <- c(f1,f2,f3) +head(all.peaks) +#[1] "chr1.181218.181695" "chr1.191296.191699" "chr1.629770.630129" +#[4] "chr1.633806.634251" "chr1.778422.779040" "chr1.827306.827702" + +chr <- as.character(as.matrix(data.frame(do.call('rbind', strsplit(as.character(all.peaks),'.',fixed=TRUE)))[1])) +start <- data.frame(do.call('rbind', strsplit(as.character(all.peaks),'.',fixed=TRUE)))[2] +end <- data.frame(do.call('rbind', strsplit(as.character(all.peaks),'.',fixed=TRUE)))[3] + +# make a bed file + +DAT <- as.data.frame(chr) +DAT$start <- as.numeric(as.matrix(start)) +DAT$end <- as.numeric(as.matrix(end)) +head(DAT) +# chr start end +#1 chr1 181218 181695 +#2 chr1 191296 191699 +#3 chr1 629770 630129 +#4 chr1 633806 634251 +#5 chr1 778422 779040 +#6 chr1 827306 827702 + +# make a GenomicRanges object + +library("GenomicRanges") + +all.gr <- GRanges(seqnames=DAT$chr,ranges=IRanges(start=DAT$start,end=DAT$end)) + +all.gr +#GRanges object with ?? ranges and 0 metadata columns: +# seqnames ranges strand +# +# [1] chr1 181218-181695 * +# [2] chr1 191296-191699 * +# [3] chr1 629770-630129 * +# [4] chr1 633806-634251 * +# [5] chr1 778422-779040 * +# ... ... ... ... +# [52] chr1 1303892-1306216 * +# [53] chr1 1307242-1309359 * +# [54] chr1 1324425-1325236 * +# [55] chr1 1348940-1349958 * +# [56] chr1 1372031-1372220 * +# ------- +# seqinfo: 1 sequence from an unspecified genome; no seqlengths + +# sort and merge the peaks + +mrg <- reduce(all.gr) + +########################## choose file and give name + +MyFile <- f1 +name="f1_new.bed" + +########################## cop paste the code here to make a new bed file that has the old and new intervals to be replaced + +chr <- as.character(as.matrix(data.frame(do.call('rbind', strsplit(as.character(MyFile),'.',fixed=TRUE)))[1])) +start <- data.frame(do.call('rbind', strsplit(as.character(MyFile),'.',fixed=TRUE)))[2] +end <- data.frame(do.call('rbind', strsplit(as.character(MyFile),'.',fixed=TRUE)))[3] +# make a bed file +DAT <- as.data.frame(chr) +DAT$start <- as.numeric(as.matrix(start)) +DAT$end <- as.numeric(as.matrix(end)) +MyFile <- DAT + +# make intrval file to replace to new regions +MyFile.gr <- GRanges(seqnames=MyFile$chr,ranges=IRanges(start=MyFile$start,end=MyFile$end)) + +F <- subsetByOverlaps(MyFile.gr,mrg) +M <- subsetByOverlaps(mrg,MyFile.gr) +### +chr <- as.character(F@seqnames) +DAT <- as.data.frame(chr) +DAT$start <- F@ranges@start +DAT$end <- (F@ranges@start + F@ranges@width) - 1 +DAT$new.chr<- as.character(M@seqnames) +DAT$new.start <- M@ranges@start +DAT$new.end <- (M@ranges@start + M@ranges@width) - 1 +# diff +ADD <- setdiff(mrg,MyFile.gr) +L <- length(as.character(ADD@seqnames)) +chr <-rep("NA",L) +DAT1 <- as.data.frame(chr) +DAT1$start <- rep("NA",L) +DAT1$end <- rep("NA",L) +DAT1$new.chr<- as.character(ADD@seqnames) +DAT1$new.start <- ADD@ranges@start +DAT1$new.end <- (ADD@ranges@start + ADD@ranges@width) - 1 + +Final.DAT <- rbind(DAT,DAT1) + +##### Write + +write.table(Final.DAT,name,row.names=FALSE,sep="\t", quote = FALSE) + +# example file +# head(Final.DAT,10) +# chr start end new.chr new.start new.end +#1 chr1 181218 181695 chr1 181218 181695 +#2 chr1 191296 191699 chr1 191296 191699 +#3 chr1 629770 630129 chr1 629770 630129 +#4 chr1 633806 634251 chr1 633806 634251 +#5 chr1 778422 779040 chr1 778422 779040 +#6 chr1 827306 827702 chr1 827306 827702 +#7 NA NA NA chr1 904635 904943 +#8 NA NA NA chr1 923684 924085 +#9 NA NA NA chr1 940590 940783 +#10 NA NA NA chr1 959052 959594 + +# The first 3 columns are the original peaks and the last 3 are the ones that need to be replaced with original one. The NA peaks would also get the new peak ids but in the matrix the cells will have 0 for expressions. To do this use the iCellR function replace.peak.id. + +MyATAC1 <- replace.peak.id(atac.data=MyATAC1, bed.file = Final.DAT) +MyATAC2 <- replace.peak.id(atac.data=MyATAC2, bed.file = Final.DAT) +MyATAC3 <- replace.peak.id(atac.data=MyATAC3, bed.file = Final.DAT) + +# finally aggregate the samples and add to iCellR object + +my.atac.data <- data.aggregation(samples = c("MyATAC1","MyATAC2","MyATAC3"), + condition.names = c("WT","KO","Ctrl")) + +# add ATAC-Seq data +my.obj@atac.raw <- MyATAC +my.obj@atac.main <- MyATAC ``` From 884dfee2b3ce08e6f4679ad6e9abc93b864048a2 Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Tue, 7 Sep 2021 19:26:27 -0400 Subject: [PATCH 39/74] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index be6ac19..21e7b65 100644 --- a/README.md +++ b/README.md @@ -3240,8 +3240,8 @@ my.atac.data <- data.aggregation(samples = c("MyATAC1","MyATAC2","MyATAC3"), condition.names = c("WT","KO","Ctrl")) # add ATAC-Seq data -my.obj@atac.raw <- MyATAC -my.obj@atac.main <- MyATAC +my.obj@atac.raw <- my.atac.data +my.obj@atac.main <- my.atac.data ``` From 19a825469735003fc783a5018d7466d65aecf617 Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Thu, 9 Sep 2021 11:09:41 -0400 Subject: [PATCH 40/74] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 21e7b65..08d0caf 100644 --- a/README.md +++ b/README.md @@ -3173,7 +3173,8 @@ mrg <- reduce(all.gr) MyFile <- f1 name="f1_new.bed" -########################## cop paste the code here to make a new bed file that has the old and new intervals to be replaced +########################## copy paste the code here to make a new bed file +########################## the new bed has the old and new intervals (new intervals to be replaced with old) chr <- as.character(as.matrix(data.frame(do.call('rbind', strsplit(as.character(MyFile),'.',fixed=TRUE)))[1])) start <- data.frame(do.call('rbind', strsplit(as.character(MyFile),'.',fixed=TRUE)))[2] From 71ca6785eddd74968e1c83006b89ba617d2086aa Mon Sep 17 00:00:00 2001 From: Khodadadi-Jamayran Date: Thu, 7 Oct 2021 14:33:30 -0400 Subject: [PATCH 41/74] =?UTF-8?q?=E2=80=9C1.6.5=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DESCRIPTION | 4 ++-- R/{F001.R => F0001.R} | 0 R/{F002.R => F0002.R} | 0 R/{F003.R => F0003.R} | 0 R/{F004.R => F0004.R} | 3 --- R/{F005.R => F0005.R} | 10 ---------- R/{F006.R => F0006.R} | 11 ----------- R/{F007.R => F0007.R} | 5 ----- R/{F008.R => F0008.R} | 4 ---- R/{F009.R => F0009.R} | 5 ----- R/F0010.R | 4 ---- R/F0011.R | 20 -------------------- R/F0012.R | 5 ----- R/F0013.R | 3 --- R/F0014.R | 6 ------ R/F0015.R | 11 ----------- R/F0017.R | 5 ----- R/F0018.R | 4 ---- R/F0020.R | 12 ------------ R/F0025.R | 9 --------- R/F0027.R | 5 ----- R/F0029.R | 3 --- R/F0030.R | 10 ---------- R/F0031.R | 15 --------------- R/F0032.R | 10 ---------- R/F0034.R | 5 ----- R/F0035.R | 16 ---------------- R/F0039.R | 11 ----------- R/F0040.R | 13 ------------- R/F0042.R | 13 ------------- R/F0043.R | 5 ----- R/F0044.R | 1 + R/F0052.R | 31 +++++++++++++++++++++++++------ R/F0057.R | 11 ----------- R/F0072.R | 26 -------------------------- R/{F00100.R => F0100.R} | 4 ++-- data/demo.obj.rda | Bin 257086 -> 0 bytes man/add.vdj.Rd | 14 -------------- man/cell.filter.Rd | 14 +------------- man/change.clust.Rd | 10 ---------- man/clust.stats.plot.Rd | 6 ------ man/cluster.plot.Rd | 13 ------------- man/data.aggregation.Rd | 2 +- man/data.scale.Rd | 8 +------- man/demo.obj.Rd | 19 ------------------- man/down.sample.Rd | 8 +------- man/find.dim.genes.Rd | 7 ------- man/gene.plot.Rd | 16 ---------------- man/gene.stats.Rd | 5 ----- man/heatmap.gg.plot.Rd | 11 ----------- man/hto.anno.Rd | 12 ------------ man/load10x.Rd | 2 +- man/make.bed.Rd | 2 +- man/make.gene.model.Rd | 21 --------------------- man/make.obj.Rd | 2 +- man/norm.data.Rd | 7 +------ man/opt.pcs.plot.Rd | 4 ---- man/prep.vdj.Rd | 12 ------------ man/pseudotime.tree.Rd | 11 ----------- man/qc.stats.Rd | 6 +----- man/run.clustering.Rd | 12 ------------ man/run.diff.exp.Rd | 6 ------ man/run.pc.tsne.Rd | 6 ------ man/run.pca.Rd | 6 ------ man/run.tsne.Rd | 6 ------ man/run.umap.Rd | 5 ----- man/stats.plot.Rd | 13 +------------ man/top.markers.Rd | 4 ---- man/vdj.stats.Rd | 14 -------------- man/volcano.ma.plot.Rd | 17 ----------------- 70 files changed, 40 insertions(+), 561 deletions(-) rename R/{F001.R => F0001.R} (100%) rename R/{F002.R => F0002.R} (100%) rename R/{F003.R => F0003.R} (100%) rename R/{F004.R => F0004.R} (97%) rename R/{F005.R => F0005.R} (96%) rename R/{F006.R => F0006.R} (95%) rename R/{F007.R => F0007.R} (97%) rename R/{F008.R => F0008.R} (97%) rename R/{F009.R => F0009.R} (85%) delete mode 100644 R/F0072.R rename R/{F00100.R => F0100.R} (98%) delete mode 100644 data/demo.obj.rda delete mode 100644 man/demo.obj.Rd diff --git a/DESCRIPTION b/DESCRIPTION index 3a859e8..5c22100 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: iCellR Type: Package Title: Analyzing High-Throughput Single Cell Sequencing Data -Version: 1.6.4 +Version: 1.6.5 Authors@R: c( person(given = 'Alireza', family = 'Khodadadi-Jamayran',role = c('aut','cre'), email = 'alireza.khodadadi.j@gmail.com', comment = c(ORCID = '0000-0003-2495-7504')), person(given = 'Joseph', family = 'Pucella',role = c('aut','ctb'), comment = c(ORCID = '0000-0003-0875-8046')), @@ -27,7 +27,7 @@ RoxygenNote: 7.1.1 BugReports: https://github.com/rezakj/iCellR/issues URL: https://github.com/rezakj/iCellR NeedsCompilation: yes -Packaged: 2021-06-07 15:57:39 UTC; khodaa01 +Packaged: 2021-10-07 18:26:50 UTC; khodaa01 Author: Alireza Khodadadi-Jamayran [aut, cre] (), Joseph Pucella [aut, ctb] (), diff --git a/R/F001.R b/R/F0001.R similarity index 100% rename from R/F001.R rename to R/F0001.R diff --git a/R/F002.R b/R/F0002.R similarity index 100% rename from R/F002.R rename to R/F0002.R diff --git a/R/F003.R b/R/F0003.R similarity index 100% rename from R/F003.R rename to R/F0003.R diff --git a/R/F004.R b/R/F0004.R similarity index 97% rename from R/F004.R rename to R/F0004.R index 4c0e37e..2f0e368 100644 --- a/R/F004.R +++ b/R/F0004.R @@ -7,9 +7,6 @@ #' @param s.phase.genes A character vector of gene names for S phase, default = s.phase. #' @param g2m.phase.genes A character vector of gene names for G2 and M phase, default = g2m.phase. #' @return The data frame object -#' @examples -#' New.demo.obj <- qc.stats(demo.obj) -#' head(New.demo.obj@stats) #' @export qc.stats <- function (x = NULL, which.data = "raw.data", diff --git a/R/F005.R b/R/F0005.R similarity index 96% rename from R/F005.R rename to R/F0005.R index 06ebd35..17bd4d2 100644 --- a/R/F005.R +++ b/R/F0005.R @@ -12,16 +12,6 @@ #' @param interactive If set to TRUE an interactive HTML file will be created, default = TRUE. #' @param out.name If "interactive" is set to TRUE, the out put name for HTML, default = "plot". #' @return An object of class iCellR. -#' @examples -#' stats.plot(demo.obj, -#' plot.type = "three.in.one", -#' out.name = "UMI-plot", -#' interactive = FALSE, -#' cell.color = "slategray3", -#' cell.size = 1, -#' cell.transparency = 0.5, -#' box.color = "red", -#' box.line.col = "green") #' @import gridExtra #' @importFrom htmlwidgets saveWidget #' @importFrom plotly ggplotly layout plot_ly diff --git a/R/F006.R b/R/F0006.R similarity index 95% rename from R/F006.R rename to R/F0006.R index cd43021..26de36c 100644 --- a/R/F006.R +++ b/R/F0006.R @@ -13,17 +13,6 @@ #' @param filter.by.gene A character vector of gene names to be filtered by thier expression. If more then one gene is defined it would be OR not AND. #' @param filter.by.gene.exp.min Minimum gene expression to be filtered by the genes set in filter.by.gene, default = 1. #' @return An object of class iCellR. -#' @examples -#' demo.obj <- cell.filter(demo.obj, -#' min.mito = 0, -#' max.mito = 0.05 , -#' min.genes = 100, -#' max.genes = 2500, -#' min.umis = 0, -#' max.umis = Inf) -#' -#' message(demo.obj@my.filters) -#' #' @export cell.filter <- function (x = NULL, min.mito = 0, diff --git a/R/F007.R b/R/F0007.R similarity index 97% rename from R/F007.R rename to R/F0007.R index d6a35a7..8428192 100644 --- a/R/F007.R +++ b/R/F0007.R @@ -3,11 +3,6 @@ #' This function takes an object of class iCellR and down samples the condition to have equal number of cells in each condition. #' @param x An object of class iCellR. #' @return An object of class iCellR. -#' @examples -#' -#' my.obj <- down.sample(demo.obj) -#' -#' #' @export down.sample <- function (x = NULL) { if ("iCellR" != class(x)[1]) { diff --git a/R/F008.R b/R/F0008.R similarity index 97% rename from R/F008.R rename to R/F0008.R index c5e2125..8f7474a 100644 --- a/R/F008.R +++ b/R/F0008.R @@ -12,10 +12,6 @@ #' @param ATAC.data If TURE, it would normalize ATAC-Seq data and not RNA-Seq, default = FALSE. #' @param ATAC.filter If TURE, all the cells filtered in RNA-Seq will be filtered in ATAC-Seq. This needs to be done for both data to match, default = TRUE. #' @return An object of class iCellR. -#' @examples -#' -#' demo.obj <- norm.data(demo.obj, norm.method = "ranked.glsf", top.rank = 500) -#' #' @export norm.data <- function (x = NULL, norm.method = "ranked.glsf", diff --git a/R/F009.R b/R/F0009.R similarity index 85% rename from R/F009.R rename to R/F0009.R index 33422cf..91403d2 100644 --- a/R/F009.R +++ b/R/F0009.R @@ -3,11 +3,6 @@ #' This function takes an object of class iCellR and scales the normalized data. #' @param x An object of class iCellR. #' @return An object of class iCellR. -#' @examples -#' my.obj <- data.scale(demo.obj) -#' -#' head(my.obj@scaled.data)[1:5] -#' #' @export data.scale <- function (x = NULL) { if ("iCellR" != class(x)[1]) { diff --git a/R/F0010.R b/R/F0010.R index 0ea8172..4b08081 100644 --- a/R/F0010.R +++ b/R/F0010.R @@ -5,10 +5,6 @@ #' @param which.data Choose from "raw.data" or "main.data", default = "raw.data". #' @param each.cond If TRUE each condition will be calculated, default = FALSE. #' @return An object of class iCellR. -#' @examples -#' demo.obj <- gene.stats(demo.obj, which.data = "main.data") -#' head(demo.obj@gene.data) -#' #' @export gene.stats <- function (x = NULL, which.data = "raw.data", diff --git a/R/F0011.R b/R/F0011.R index f82d782..4f5b5c0 100644 --- a/R/F0011.R +++ b/R/F0011.R @@ -19,26 +19,6 @@ #' @param interactive If set to TRUE an interactive HTML file will be created, default = TRUE. #' @param out.name If "interactive" is set to TRUE, the out put name for HTML, default = "plot". #' @return An object of class iCellR. -#' @examples -#' make.gene.model(demo.obj, -#' dispersion.limit = 1.5, -#' base.mean.rank = 500, -#' no.mito.model = TRUE, -#' mark.mito = TRUE, -#' interactive = FALSE, -#' my.out.put = "plot", -#' out.name = "gene.model") -#' -#' demo.obj <- make.gene.model(demo.obj, -#' dispersion.limit = 1.5, -#' base.mean.rank = 500, -#' no.mito.model = TRUE, -#' mark.mito = TRUE, -#' interactive = FALSE, -#' out.name = "gene.model") -#' -#' head(demo.obj@gene.model) -#' #' @import ggrepel #' @export make.gene.model <- function (x = NULL, diff --git a/R/F0012.R b/R/F0012.R index 30636cd..a9adaf5 100644 --- a/R/F0012.R +++ b/R/F0012.R @@ -9,11 +9,6 @@ #' @param gene.list A charactor vector of genes to be used for PCA. If "clust.method" is set to "gene.model", default = "my_model_genes.txt". #' @param scale.data If TRUE the data will be scaled (log2 + plus.log.value), default = TRUE. #' @return An object of class iCellR. -#' @examples -#' demo.obj <- run.pca(demo.obj, method = "gene.model", gene.list = demo.obj@gene.model) -#' -#' head(demo.obj@pca.data)[1:5] -#' #' @export run.pca <- function (x = NULL, data.type = "main", diff --git a/R/F0013.R b/R/F0013.R index 9780a65..583be6e 100644 --- a/R/F0013.R +++ b/R/F0013.R @@ -4,9 +4,6 @@ #' @param x An object of class iCellR. #' @param pcs.in.plot Number of PCs to show in plot, defult = 50. #' @return An object of class iCellR. -#' @examples -#' opt.pcs.plot(demo.obj) -#' #' @export opt.pcs.plot <- function (x = NULL, pcs.in.plot = 50) { if ("iCellR" != class(x)[1]) { diff --git a/R/F0014.R b/R/F0014.R index e1a734f..f72262f 100644 --- a/R/F0014.R +++ b/R/F0014.R @@ -6,12 +6,6 @@ #' @param top.pos Number of top positive marker genes to be taken from each PC, default = 15. #' @param top.neg Number of top negative marker genes to be taken from each PC, default = 5. #' @return An object of class iCellR. -#' @examples -#' -#' demo.obj <- find.dim.genes(demo.obj, dims = 1:10,top.pos = 20, top.neg = 20) -#' -#' head(demo.obj@gene.model) -#' #' @export find.dim.genes <- function (x = NULL, dims = 1:10, diff --git a/R/F0015.R b/R/F0015.R index 482c73b..8e21eba 100644 --- a/R/F0015.R +++ b/R/F0015.R @@ -9,17 +9,6 @@ #' @param min.clust minimum number of clusters, default = 2. #' @param dims PCA dimentions to be use for clustering, default = 1:10. #' @return An object of class iCellR. -#' @examples -#' demo.obj <- run.clustering(demo.obj, -#' clust.method = "kmeans", -#' dist.method = "euclidean", -#' index.method = "silhouette", -#' max.clust = 2, -#' min.clust = 2, -#' dims = 1:10) -#' -#' head(demo.obj@best.clust) -#' #' @import NbClust #' @export run.clustering <- function (x = NULL, diff --git a/R/F0017.R b/R/F0017.R index eb6136e..6047edf 100644 --- a/R/F0017.R +++ b/R/F0017.R @@ -23,11 +23,6 @@ #' @param eta numeric; Learning rate (default: 200.0) #' @param exaggeration_factor numeric; Exaggeration factor used to multiply the P matrix in the first part of the optimization (default: 12.0) #' @return An object of class iCellR. -#' @examples -#' demo.obj <- run.pc.tsne(demo.obj, dims = 1:10,perplexity = 20) -#' -#' head(demo.obj@pca.data)[1:5] -#' #' @import Rtsne #' @export run.pc.tsne <- function (x = NULL, diff --git a/R/F0018.R b/R/F0018.R index 015a9f6..342d8f1 100644 --- a/R/F0018.R +++ b/R/F0018.R @@ -286,10 +286,6 @@ #' @param verbose If \code{TRUE}, log details to the console. #' #' @return An object of class iCellR. -#' @examples -#' demo.obj <- run.umap(demo.obj, dims = 1:10) -#' head(demo.obj@umap.data) -#' #' @import uwot #' @export run.umap <- function (x = NULL, diff --git a/R/F0020.R b/R/F0020.R index 76064ac..c50e780 100644 --- a/R/F0020.R +++ b/R/F0020.R @@ -20,18 +20,6 @@ #' @param density If TRUE the density plots for PCA/tSNE second dimension will be created, default = FALSE. #' @param static3D If TRUE a non-interactive 3D plot will be made. #' @return An object of class iCellR. -#' @examples -#' cluster.plot(demo.obj,plot.type = "umap",interactive = FALSE) -#' -#' cluster.plot(demo.obj,plot.type = "tsne",interactive = FALSE) -#' -#' cluster.plot(demo.obj,plot.type = "pca",interactive = FALSE) -#' -#' cluster.plot(demo.obj,plot.type = "pca",col.by = "conditions",interactive = FALSE) -#' -#' cluster.plot(demo.obj,plot.type = "umap",col.by = "conditions",interactive = FALSE) -#' -#' cluster.plot(demo.obj,plot.type = "tsne",col.by = "conditions",interactive = FALSE) #' @import RColorBrewer #' @import scatterplot3d #' @importFrom htmlwidgets saveWidget diff --git a/R/F0025.R b/R/F0025.R index 9697331..758e169 100644 --- a/R/F0025.R +++ b/R/F0025.R @@ -6,15 +6,6 @@ #' @param to.clust The new name for the cluster. #' @param clust.reset Reset to the original clustering. #' @return An object of class iCellR. -#' @examples -#' demo.obj <- change.clust(demo.obj, change.clust = 1, to.clust = 3) -#' cluster.plot(demo.obj,plot.type = "umap",interactive = FALSE) -#' -#' demo.obj <- change.clust(demo.obj, change.clust = 3, to.clust = "B Cell") -#' cluster.plot(demo.obj,plot.type = "umap",interactive = FALSE) -#' -#' demo.obj <- change.clust(demo.obj, clust.reset = TRUE) -#' cluster.plot(demo.obj,plot.type = "umap",interactive = FALSE) #' @export change.clust <- function (x = NULL, change.clust = 0, diff --git a/R/F0027.R b/R/F0027.R index ff900ee..ffaf159 100644 --- a/R/F0027.R +++ b/R/F0027.R @@ -14,11 +14,6 @@ #' @param out.name If "interactive" is set to TRUE, the out put name for HTML, default = "plot". #' @param conds.to.plot Choose the conditions you want to see in the plot, default = NULL (all conditions). #' @return An object of class iCellR. -#' @examples -#' clust.stats.plot(demo.obj, -#' plot.type = "box.mito", -#' interactive = FALSE, -#' out.name = "box.mito.clusters") #' @export clust.stats.plot <- function (x = NULL, plot.type = "box.mito", diff --git a/R/F0029.R b/R/F0029.R index 4672c2d..3747386 100644 --- a/R/F0029.R +++ b/R/F0029.R @@ -7,9 +7,6 @@ #' @param filt.ambig Filter markers that are seen for more than one cluster, default = TRUE. #' @param cluster Choose a cluster to find markers for. If 0, it would find markers for all clusters, , default = 0. #' @return A set of gene names -#' @examples -#' marker.genes <- findMarkers(demo.obj,fold.change = 2,padjval = 0.1,uniq = TRUE) -#' top.markers(marker.genes, topde = 10, min.base.mean = 0.8) #' @import Matrix #' @export top.markers <- function (x = NULL, topde = 10, diff --git a/R/F0030.R b/R/F0030.R index d14c398..c462454 100644 --- a/R/F0030.R +++ b/R/F0030.R @@ -16,16 +16,6 @@ #' @param cex.col Chhose a size, default = 10. #' @param cex.row Choose a size, default = 10. #' @return An object of class iCellR -#' @examples -#' marker.genes <- findMarkers(demo.obj,fold.change = 2,padjval = 0.1,uniq = TRUE) -#' -#' MyGenes <- top.markers(marker.genes, topde = 10, min.base.mean = 0.8) -#' -#' heatmap.gg.plot(demo.obj, -#' gene = MyGenes, -#' out.name = "plot", -#' cluster.by = "clusters", -#' interactive = FALSE) #' @import pheatmap #' @importFrom reshape melt #' @importFrom htmlwidgets saveWidget diff --git a/R/F0031.R b/R/F0031.R index 68cecd2..e246ff9 100644 --- a/R/F0031.R +++ b/R/F0031.R @@ -27,21 +27,6 @@ #' @param out.name If "interactive" is set to TRUE, the out put name for HTML, default = "plot". #' @param write.data Write export the data used for the plot plot, default = TFALSE. #' @return An object of class iCellR. -#' @examples -#' gene.plot(demo.obj, gene = "CD74",interactive = FALSE) -#' -#' gene.plot(demo.obj, gene = "CD74",plot.data.type = "umap",interactive = FALSE) -#' -#' gene.plot(demo.obj, gene = "CD74", -#' plot.data.type = "umap", -#' interactive = FALSE, -#' plot.type = "barplot") -#' -#' gene.plot(demo.obj, gene = "CD74", -#' plot.data.type = "umap", -#' interactive = FALSE, -#' plot.type = "boxplot") -#' #' @importFrom ggpubr stat_compare_means #' @import plyr #' @importFrom htmlwidgets saveWidget diff --git a/R/F0032.R b/R/F0032.R index 706d86f..d3964f8 100644 --- a/R/F0032.R +++ b/R/F0032.R @@ -11,16 +11,6 @@ #' @param type Choose from "classic", "jitter", "unrooted", "fan", "cladogram", "radial", default = "classic". #' @param cex Text size, default = 1. #' @return An object of class iCellR. -#' @examples -#' marker.genes <- findMarkers(demo.obj,fold.change = 2,padjval = 0.1,uniq = TRUE) -#' -#' MyGenes <- top.markers(marker.genes, topde = 10, min.base.mean = 0.8) -#' -#' pseudotime.tree(demo.obj, -#' marker.genes = MyGenes, -#' type = "unrooted", -#' clust.method = "complete") -#' #' @import gridExtra #' @import ggdendro #' @import ape diff --git a/R/F0034.R b/R/F0034.R index 2050d59..28dd54a 100644 --- a/R/F0034.R +++ b/R/F0034.R @@ -10,11 +10,6 @@ #' @param pval.test Choose from "t.test", "wilcox.test", default = "t.test". #' @param p.adjust.method Correction method. Choose from "holm", "hochberg", "hommel", "bonferroni", "BH", "BY","fdr", "none", default = "hochberg". #' @return An object of class iCellR -#' @examples -#' diff.res <- run.diff.exp(demo.obj, de.by = "clusters", cond.1 = c(1), cond.2 = c(2)) -#' -#' head(diff.res) -#' #' @export run.diff.exp <- function (x = NULL, data.type = "main", diff --git a/R/F0035.R b/R/F0035.R index 1cbd177..918e632 100644 --- a/R/F0035.R +++ b/R/F0035.R @@ -15,22 +15,6 @@ #' @param interactive If set to TRUE an interactive HTML file will be created, default = TRUE. #' @param out.name If "interactive" is set to TRUE, the output name for HTML, default = "plot". #' @return Plots -#' @examples -#' -#' diff.res <- run.diff.exp(demo.obj, de.by = "clusters", cond.1 = c(1), cond.2 = c(2)) -#' -#' volcano.ma.plot(diff.res, -#' sig.value = "pval", -#' sig.line = 0.05, -#' plot.type = "volcano", -#' interactive = FALSE) -#' -#' volcano.ma.plot(diff.res, -#' sig.value = "pval", -#' sig.line = 0.05, -#' plot.type = "ma", -#' interactive = FALSE) -#' #' @importFrom grDevices col2rgb colorRampPalette rgb #' @importFrom methods new #' @importFrom stats aggregate as.dendrogram cor cor.test dist hclust p.adjust prcomp quantile sd t.test diff --git a/R/F0039.R b/R/F0039.R index f85e3ed..91fa66d 100644 --- a/R/F0039.R +++ b/R/F0039.R @@ -4,17 +4,6 @@ #' @param vdj.data A data frame containing vdj information. #' @param cond.name Conditions. #' @return An object of class iCellR -#' @examples -#' my.vdj <- read.csv(file = system.file('extdata', 'all_contig_annotations.csv', -#' package = 'iCellR'), -#' as.is = TRUE) -#' head(my.vdj) -#' dim(my.vdj) -#' -#' My.VDJ <- prep.vdj(vdj.data = my.vdj, cond.name = "NULL") -#' head(My.VDJ) -#' dim(My.VDJ) -#' #' @export prep.vdj <- function (vdj.data = "data.frame", cond.name = "NULL") { # read VDJ data diff --git a/R/F0040.R b/R/F0040.R index b456a7c..b89cde9 100644 --- a/R/F0040.R +++ b/R/F0040.R @@ -4,19 +4,6 @@ #' @param x An object of class iCellR. #' @param vdj.data A data frame containing VDJ information for cells. #' @return An object of class iCellR -#' @examples -#' my.vdj <- read.csv(file = system.file('extdata', 'all_contig_annotations.csv', -#' package = 'iCellR'), -#' as.is = TRUE) -#' head(my.vdj) -#' dim(my.vdj) -#' -#' My.VDJ <- prep.vdj(vdj.data = my.vdj, cond.name = "NULL") -#' head(My.VDJ) -#' dim(My.VDJ) -#' -#' my.obj <- add.vdj(demo.obj, vdj.data = My.VDJ) -#' #' @export add.vdj <- function (x = NULL, vdj.data = "data.frame") { if ("iCellR" != class(x)[1]) { diff --git a/R/F0042.R b/R/F0042.R index 0fba2e3..894bae9 100644 --- a/R/F0042.R +++ b/R/F0042.R @@ -3,19 +3,6 @@ #' This function takes a data frame of VDJ info per cell and dose QC. #' @param my.vdj A data frame containing VDJ data for cells. #' @return An object of class iCellR -#' @examples -#' my.vdj <- read.csv(file = system.file('extdata', 'all_contig_annotations.csv', -#' package = 'iCellR'), -#' as.is = TRUE) -#' head(my.vdj) -#' dim(my.vdj) -#' -#' My.VDJ <- prep.vdj(vdj.data = my.vdj, cond.name = "NULL") -#' head(My.VDJ) -#' dim(My.VDJ) -#' -#' vdj.stats(My.VDJ) -#' #' @export vdj.stats <- function (my.vdj = "data.frame") { # read VDJ data diff --git a/R/F0043.R b/R/F0043.R index 07c7473..d48400c 100644 --- a/R/F0043.R +++ b/R/F0043.R @@ -24,11 +24,6 @@ #' @param eta numeric; Learning rate (default: 200.0) #' @param exaggeration_factor numeric; Exaggeration factor used to multiply the P matrix in the first part of the optimization (default: 12.0) #' @return An object of class iCellR. -#' @examples -#' demo.obj <- run.tsne(demo.obj, perplexity = 20) -#' -#' head(demo.obj@tsne.data) -#' #' @import Rtsne #' @export run.tsne <- function (x = NULL, diff --git a/R/F0044.R b/R/F0044.R index 2c26641..9ea9274 100644 --- a/R/F0044.R +++ b/R/F0044.R @@ -4,6 +4,7 @@ setClass("iCellR", representation (raw.data = "data.frame", scaled.data = "data.frame", batch.aligned.data = "data.frame", metadata = "data.frame", + pram = "character", atac.raw = "data.frame", atac.main = "data.frame", atac.imputed = "data.frame", diff --git a/R/F0052.R b/R/F0052.R index d572072..ebbc141 100644 --- a/R/F0052.R +++ b/R/F0052.R @@ -1,7 +1,26 @@ -#' An object of class iCellR for demo +#' Make BED Files #' -#' A demo object -#' -#' @format Subset of the data with 200 genes and 90 cells -#' @source \url{https://s3-us-west-2.amazonaws.com/10x.files/samples/cell/pbmc3k/pbmc3k_filtered_gene_bc_matrices.tar.gz} -"demo.obj" +#' This function takes peak marker files and makes the bed files per cluster. +#' @param x Peak marker file. +#' @return Bed files +#' @export +make.bed <- function (x = NULL) { +# get filed + results <- subset(x,select=c(gene,clusters,AvExpInOtherClusters)) + peaks <- as.character(results$gene) + peaks <- (gsub("\\.","_",peaks)) + peaks <- data.frame(do.call('rbind', strsplit(as.character(peaks),'_',fixed=TRUE))) + results <- cbind(peaks,results) +####### + My.clusters <- unique(results$clusters) +####### + for(i in My.clusters){ + dat <- subset(results, results$clusters == i) + dat <- subset(dat,select=c(X1,X2,X3,gene,AvExpInOtherClusters)) + MyName <- paste("peaks_cluster_",i,".bed",sep="") + if(dim(dat)[1] > 0) { + write.table(dat, MyName, sep="\t", quote = FALSE,row.names =FALSE, col.names = FALSE,) + } + } +} + diff --git a/R/F0057.R b/R/F0057.R index 211848d..5c7e585 100644 --- a/R/F0057.R +++ b/R/F0057.R @@ -5,17 +5,6 @@ #' @param cov.thr A number which average coverage is divided by to set a threshold for low coverage. For example 10 means it is 10 time less than the average. default = 10. #' @param assignment.thr A percent above which you decide to set as a good sample assignment/HTO, default = 80. #' @return An object of class iCellR -#' @examples -#' my.hto <- read.table(file = system.file('extdata', 'dense_umis.tsv', -#' package = 'iCellR'), -#' as.is = TRUE) -#' head(my.hto)[1:5] -#' -#' htos <- hto.anno(hto.data = my.hto) -#' head(htos) -#' -#' boxplot(htos$percent.match) -#' #' @export hto.anno <- function (hto.data = "data.frame", cov.thr = 10, diff --git a/R/F0072.R b/R/F0072.R deleted file mode 100644 index ebbc141..0000000 --- a/R/F0072.R +++ /dev/null @@ -1,26 +0,0 @@ -#' Make BED Files -#' -#' This function takes peak marker files and makes the bed files per cluster. -#' @param x Peak marker file. -#' @return Bed files -#' @export -make.bed <- function (x = NULL) { -# get filed - results <- subset(x,select=c(gene,clusters,AvExpInOtherClusters)) - peaks <- as.character(results$gene) - peaks <- (gsub("\\.","_",peaks)) - peaks <- data.frame(do.call('rbind', strsplit(as.character(peaks),'_',fixed=TRUE))) - results <- cbind(peaks,results) -####### - My.clusters <- unique(results$clusters) -####### - for(i in My.clusters){ - dat <- subset(results, results$clusters == i) - dat <- subset(dat,select=c(X1,X2,X3,gene,AvExpInOtherClusters)) - MyName <- paste("peaks_cluster_",i,".bed",sep="") - if(dim(dat)[1] > 0) { - write.table(dat, MyName, sep="\t", quote = FALSE,row.names =FALSE, col.names = FALSE,) - } - } -} - diff --git a/R/F00100.R b/R/F0100.R similarity index 98% rename from R/F00100.R rename to R/F0100.R index 562ea29..678028f 100644 --- a/R/F00100.R +++ b/R/F0100.R @@ -156,7 +156,7 @@ utils::globalVariables(c("%>%", # cell.cycle.R | F0049.R # clust.ord.R | F0050.R # data.Sphase.R | F0051.R -# data.demo.obj.R | F0052.R +# make.bed.R | F0052.R (Used to be data.demo.obj.R | F0052.R) # data.g2m.R | F0053.R # findKNN.R | F0054.R # gg.cor.R | F0055.R @@ -176,4 +176,4 @@ utils::globalVariables(c("%>%", # add.10x.image.R | F0069.R # spatial.plot.R | F0070.R # i.score.R | F0071.R -# make.bed.R | F0072.R + diff --git a/data/demo.obj.rda b/data/demo.obj.rda deleted file mode 100644 index f3d17b0798394e0e658de8df57e313ce3274d836..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 257086 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 z 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 Date: Tue, 9 Nov 2021 12:49:17 -0500 Subject: [PATCH 42/74] fix --- DESCRIPTION | 2 +- R/F0021.R | 17 +++++++++++++++++ R/F0049.R | 2 +- R/F0051.R | 2 +- R/F0053.R | 2 +- R/F0071.R | 2 +- man/cell.cycle.Rd | 2 +- man/clust.avg.exp.Rd | 3 +++ man/g2m.phase.Rd | 2 +- man/i.score.Rd | 2 +- man/s.phase.Rd | 2 +- 11 files changed, 29 insertions(+), 9 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 5c22100..48b82f9 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -27,7 +27,7 @@ RoxygenNote: 7.1.1 BugReports: https://github.com/rezakj/iCellR/issues URL: https://github.com/rezakj/iCellR NeedsCompilation: yes -Packaged: 2021-10-07 18:26:50 UTC; khodaa01 +Packaged: 2021-11-09 17:46:10 UTC; khodaa01 Author: Alireza Khodadadi-Jamayran [aut, cre] (), Joseph Pucella [aut, ctb] (), diff --git a/R/F0021.R b/R/F0021.R index 81c0f5d..197403f 100644 --- a/R/F0021.R +++ b/R/F0021.R @@ -5,6 +5,7 @@ #' @param data.type Choose from "main", "atac", "atac.imputed" and "imputed", default = "main" #' @param conds.to.avg Choose the conditions you want to average, default = NULL (all conditions). #' @param rounding.digits integer indicating the number of decimal places (round) or significant digits (signif) to be used. +#' @param low.cell.filt filter out clusters with low number of cells, default = 5. #' @param round.num Rounding of Numbers, default = FALSE. #' @return An object of class iCellR. #' @import progress @@ -13,6 +14,7 @@ clust.avg.exp <- function (x = NULL, data.type = "main", conds.to.avg = NULL, rounding.digits = 4, + low.cell.filt = 5, round.num = FALSE) { if ("iCellR" != class(x)[1]) { stop("x should be an object of class iCellR") @@ -35,6 +37,21 @@ clust.avg.exp <- function (x = NULL, sampleCondition <- DATA$clusters conditions <- sort(unique(sampleCondition)) DATA1 <- DATA +#### warn and filter + warn <- as.data.frame(table(DATA1$clusters)) + warn <- subset(warn, warn$Freq < low.cell.filt) + warn <- as.numeric(as.matrix(warn$Var1)) + if(length(warn) != 0) { + message("########### Warning ###########") + message("###############################") + message("###############################") + message(paste("#### Filter warning: cluster",warn,"has less than",ncell.filt,"cells (cluster excluded)")) + DATA1<- subset(DATA1,!DATA1$clusters %in% warn) + conditions <- subset(conditions, !conditions %in% warn) + message("###############################") + message("###############################") + message("###############################") + } ## get main data if (data.type == "main") { Table <- x@main.data diff --git a/R/F0049.R b/R/F0049.R index 337eed2..6ee388f 100644 --- a/R/F0049.R +++ b/R/F0049.R @@ -4,7 +4,7 @@ #' @param object A data frame containing gene counts for cells. #' @param scoring.List Genes that are used as a marker for phases. #' @param return.stats Return the data or object. If FALSE the object would be returned. -#' @param scoring.method Choose from "coverage" or "tirosh" for scoring method. See: https://science.sciencemag.org/content/352/6282/189 +#' @param scoring.method Choose from "coverage" or "tirosh" for scoring method. #' @return The data frame object #' @importFrom Hmisc cut2 #' @export diff --git a/R/F0051.R b/R/F0051.R index 9f7fedb..e633d65 100644 --- a/R/F0051.R +++ b/R/F0051.R @@ -3,5 +3,5 @@ #' A dataset containing the genes for S phase #' #' @format A character with 43 genes -#' @source \url{https://science.sciencemag.org/content/352/6282/189} +#' @source \url{https://www.science.org/doi/abs/10.1126/science.aad0501} "s.phase" diff --git a/R/F0053.R b/R/F0053.R index 59e0e52..b6f5bcf 100644 --- a/R/F0053.R +++ b/R/F0053.R @@ -3,5 +3,5 @@ #' A dataset containing the genes for G2 and M phase #' #' @format A character with 54 genes -#' @source \url{https://science.sciencemag.org/content/352/6282/189} +#' @source \url{https://www.science.org/doi/abs/10.1126/science.aad0501} "g2m.phase" diff --git a/R/F0071.R b/R/F0071.R index edb819f..5e91ecf 100644 --- a/R/F0071.R +++ b/R/F0071.R @@ -5,7 +5,7 @@ #' @param data.type Choose from "raw.data" or "main.data", "imputed.data", default = "main.data". #' @param scoring.List Genes that are used as a marker for phases. #' @param return.stats Return the data or object. If FALSE the object would be returned. -#' @param scoring.method Choose from "tirosh (Tirosh, et. al. 2016), mean, sum, gsva, ssgsea, zscore and plage. , default = "tirosh". See: https://science.sciencemag.org/content/352/6282/189 +#' @param scoring.method Choose from "tirosh (Tirosh, et. al. 2016), mean, sum, gsva, ssgsea, zscore and plage. , default = "tirosh". #' @return The data frame object #' @importFrom Hmisc cut2 #' @export diff --git a/man/cell.cycle.Rd b/man/cell.cycle.Rd index 552f36c..c1d5487 100644 --- a/man/cell.cycle.Rd +++ b/man/cell.cycle.Rd @@ -18,7 +18,7 @@ cell.cycle( \item{return.stats}{Return the data or object. If FALSE the object would be returned.} -\item{scoring.method}{Choose from "coverage" or "tirosh" for scoring method. See: https://science.sciencemag.org/content/352/6282/189} +\item{scoring.method}{Choose from "coverage" or "tirosh" for scoring method.} } \value{ The data frame object diff --git a/man/clust.avg.exp.Rd b/man/clust.avg.exp.Rd index 3635aa1..9d55c8b 100644 --- a/man/clust.avg.exp.Rd +++ b/man/clust.avg.exp.Rd @@ -9,6 +9,7 @@ clust.avg.exp( data.type = "main", conds.to.avg = NULL, rounding.digits = 4, + low.cell.filt = 5, round.num = FALSE ) } @@ -21,6 +22,8 @@ clust.avg.exp( \item{rounding.digits}{integer indicating the number of decimal places (round) or significant digits (signif) to be used.} +\item{low.cell.filt}{filter out clusters with low number of cells, default = 5.} + \item{round.num}{Rounding of Numbers, default = FALSE.} } \value{ diff --git a/man/g2m.phase.Rd b/man/g2m.phase.Rd index 1fde236..2cdaf9e 100644 --- a/man/g2m.phase.Rd +++ b/man/g2m.phase.Rd @@ -8,7 +8,7 @@ A character with 54 genes } \source{ -\url{https://science.sciencemag.org/content/352/6282/189} +\url{https://www.science.org/doi/abs/10.1126/science.aad0501} } \usage{ g2m.phase diff --git a/man/i.score.Rd b/man/i.score.Rd index f7ed5ea..a705692 100644 --- a/man/i.score.Rd +++ b/man/i.score.Rd @@ -21,7 +21,7 @@ i.score( \item{return.stats}{Return the data or object. If FALSE the object would be returned.} -\item{scoring.method}{Choose from "tirosh (Tirosh, et. al. 2016), mean, sum, gsva, ssgsea, zscore and plage. , default = "tirosh". See: https://science.sciencemag.org/content/352/6282/189} +\item{scoring.method}{Choose from "tirosh (Tirosh, et. al. 2016), mean, sum, gsva, ssgsea, zscore and plage. , default = "tirosh".} } \value{ The data frame object diff --git a/man/s.phase.Rd b/man/s.phase.Rd index 7aa4296..ab4d96d 100644 --- a/man/s.phase.Rd +++ b/man/s.phase.Rd @@ -8,7 +8,7 @@ A character with 43 genes } \source{ -\url{https://science.sciencemag.org/content/352/6282/189} +\url{https://www.science.org/doi/abs/10.1126/science.aad0501} } \usage{ s.phase From 1db9abeef62af7a81b2984c41e845c4533968420 Mon Sep 17 00:00:00 2001 From: Khodadadi-Jamayran Date: Tue, 9 Nov 2021 13:06:11 -0500 Subject: [PATCH 43/74] 1.6.6 --- DESCRIPTION | 4 ++-- R/F0021.R | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 48b82f9..fd17b92 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: iCellR Type: Package Title: Analyzing High-Throughput Single Cell Sequencing Data -Version: 1.6.5 +Version: 1.6.6 Authors@R: c( person(given = 'Alireza', family = 'Khodadadi-Jamayran',role = c('aut','cre'), email = 'alireza.khodadadi.j@gmail.com', comment = c(ORCID = '0000-0003-2495-7504')), person(given = 'Joseph', family = 'Pucella',role = c('aut','ctb'), comment = c(ORCID = '0000-0003-0875-8046')), @@ -27,7 +27,7 @@ RoxygenNote: 7.1.1 BugReports: https://github.com/rezakj/iCellR/issues URL: https://github.com/rezakj/iCellR NeedsCompilation: yes -Packaged: 2021-11-09 17:46:10 UTC; khodaa01 +Packaged: 2021-11-09 18:05:17 UTC; khodaa01 Author: Alireza Khodadadi-Jamayran [aut, cre] (), Joseph Pucella [aut, ctb] (), diff --git a/R/F0021.R b/R/F0021.R index 197403f..c5b69ac 100644 --- a/R/F0021.R +++ b/R/F0021.R @@ -45,7 +45,7 @@ clust.avg.exp <- function (x = NULL, message("########### Warning ###########") message("###############################") message("###############################") - message(paste("#### Filter warning: cluster",warn,"has less than",ncell.filt,"cells (cluster excluded)")) + message(paste("#### Filter warning: cluster",warn,"has less than",low.cell.filt,"cells (cluster excluded)")) DATA1<- subset(DATA1,!DATA1$clusters %in% warn) conditions <- subset(conditions, !conditions %in% warn) message("###############################") From 14f643cea4a85a9539d3e31be6ecbd1f9d3f0073 Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Fri, 3 Dec 2021 12:34:57 -0500 Subject: [PATCH 44/74] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 08d0caf..666cd1e 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ # iCellR iCellR is an interactive R package to work with high-throughput single cell sequencing technologies (i.e scRNA-seq, scVDJ-seq, scATAC-seq, CITE-Seq and Spatial Transcriptomics (ST)). -### News (April 2021): Use iCellR version 1.6.4 for scATAC-seq and Spatial Transcriptomics (ST). Use the i.score function for scoring (scoring cells based on gene signatures) methods (i.e. tirosh, mean, sum, gsva, ssgsea, zscore and plage). +### News (April 2021): Use iCellR version 1.6.4 for scATAC-seq and Spatial Transcriptomics (ST). Use the [i.score](https://github.com/rezakj/iCellR/wiki/i.score) function for scoring (scoring cells based on gene signatures) methods (i.e. tirosh, mean, sum, gsva, ssgsea, zscore and plage). ### News (July 2020): See iCellR version 1.5.5 with new cell cycle analysis for G0, G1S, G2M, M, G1M and S [phase](https://genome.med.nyu.edu/results/external/iCellR/example1/All_cellcycle.png), Pseudotime Abstract KNetL map [(PAK map)](https://genome.med.nyu.edu/results/external/iCellR/example1/pseudotime.KNetL.png) and gene-gene [correlations](https://genome.med.nyu.edu/results/external/iCellR/example1/gene-gene.correlation.png). See below for how to. From 672ae5f9efc29ba84798824d3372d6c450e3799b Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Fri, 17 Dec 2021 15:48:46 -0500 Subject: [PATCH 45/74] Update README.md --- README.md | 158 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 158 insertions(+) diff --git a/README.md b/README.md index 666cd1e..20b11ef 100644 --- a/README.md +++ b/README.md @@ -1887,6 +1887,164 @@ my.obj <- make.obj(my.data) # The rest is as above :) ``` +# How to use i.score to rank/score the cells: + +This data is from this publication (GEO number: GSE156246 and PMID: 34911733) + +This is a how to guide to run i.score function in iCellR and to reproduce the above published data for G0 and non G0 cells. + +Download the sample iCellR objects (used in the publication) from here: https://genome.med.nyu.edu/results/external/iCellR/i.score/ +(my.obj@raw.data in these objects are log normalized) + +Download sample gene signatures from here: https://genome.med.nyu.edu/results/external/iCellR/i.score/gene_signatures.tar.gz +(gene signatures used in the publication are in the supplementary data of the paper) + +```r +# load sample gene signature that are in iCellR +# (these cell cycle signatures are from here: https://www.nature.com/articles/s41586-019-1884-x) + +library(iCellR) +G0 <- readLines(system.file('extdata', 'G0.txt', package = 'iCellR')) +G1S <- readLines(system.file('extdata', 'G1S.txt', package = 'iCellR')) +G2M <- readLines(system.file('extdata', 'G2M.txt', package = 'iCellR')) +M <- readLines(system.file('extdata', 'M.txt', package = 'iCellR')) +MG1 <- readLines(system.file('extdata', 'MG1.txt', package = 'iCellR')) +S <- readLines(system.file('extdata', 'S.txt', package = 'iCellR')) + +# load all the gene signatures + +Melnick_10_GILMORE_CORE_NFKB_PATHWAY.txt <- readLines("10_GILMORE_CORE_NFKB_PATHWAY.txt") +Melnick_11_HALLMARK_MYC_TARGETS_V1.txt <- readLines("11_HALLMARK_MYC_TARGETS_V1.txt") +Melnick_12_GO_BETA_CATENIN_BINDING.txt <- readLines("12_GO_BETA_CATENIN_BINDING.txt") +Melnick_13_PID_BETA_CATENIN_NUC_PATHWAY.txt <- readLines("13_PID_BETA_CATENIN_NUC_PATHWAY.txt") +Melnick_14_PID_WNT_SIGNALING_PATHWAY.txt <- readLines("14_PID_WNT_SIGNALING_PATHWAY.txt") +Melnick_15_PID_WNT_CANONICAL_PATHWAY.txt <- readLines("15_PID_WNT_CANONICAL_PATHWAY.txt") +Melnick_16_Pribluda_SENESCENCE_INFLAMMATORY_GENES.txt <- readLines("16_Pribluda_SENESCENCE_INFLAMMATORY_GENES.txt") +Melnick_17_FRIDMAN_SENESCENCE_DN.txt <- readLines("17_FRIDMAN_SENESCENCE_DN.txt") +Melnick_18_FRIDMAN_SENESCENCE_UP.txt <- readLines("18_FRIDMAN_SENESCENCE_UP.txt") +Melnick_19_DeJONGE_LSC_TOP50_genes.txt <- readLines("19_DeJONGE_LSC_TOP50_genes.txt") +Melnick_1_AML1566_AraC_UP.txt <- readLines("1_AML1566_AraC_UP.txt") +Melnick_20_GAL_LEUKEMIC_STEM_CELL_UP.txt <- readLines("20_GAL_LEUKEMIC_STEM_CELL_UP.txt") +Melnick_21_GAL_LEUKEMIC_STEM_CELL_DN.txt <- readLines("21_GAL_LEUKEMIC_STEM_CELL_DN.txt") +Melnick_22_EPPERT_CE_HSC_LSC.txt <- readLines("22_EPPERT_CE_HSC_LSC.txt") +Melnick_23_JAATINEN_HEMATOPOIETIC_STEM_CELL_UP.txt <- readLines("23_JAATINEN_HEMATOPOIETIC_STEM_CELL_UP.txt") +Melnick_24_JAATINEN_HEMATOPOIETIC_STEM_CELL_DN.txt <- readLines("24_JAATINEN_HEMATOPOIETIC_STEM_CELL_DN.txt") +Melnick_25_INFLAMMATORY_RESPONSE.txt <- readLines("25_INFLAMMATORY_RESPONSE.txt") +Melnick_26_RAMALHO_STEMNESS_DN.txt <- readLines("26_RAMALHO_STEMNESS_DN.txt") +Melnick_27_RAMALHO_STEMNESS_UP.txt <- readLines("27_RAMALHO_STEMNESS_UP.txt") +Melnick_28_REACTOME_REGULATION_OF_MITOTIC_CELL_CYCLE.txt <- readLines("28_REACTOME_REGULATION_OF_MITOTIC_CELL_CYCLE.txt") +Melnick_2_AML1566_AraC_DN.txt <- readLines("2_AML1566_AraC_DN.txt") +Melnick_3_DUY_CISG_UP.txt <- readLines("3_DUY_CISG_UP.txt") +Melnick_4_DUY_CISG_DN.txt <- readLines("4_DUY_CISG_DN.txt") +Melnick_5_DIAPAUSE_UP_BOROVIAK.txt <- readLines("5_DIAPAUSE_UP_BOROVIAK.txt") +Melnick_6_BOROVIAK_DIAPAUSE_DN.txt <- readLines("6_BOROVIAK_DIAPAUSE_DN.txt") +Melnick_7_SASP_COPPE.txt <- readLines("7_SASP_COPPE.txt") +Melnick_8_SALDIVAR_ATR_SUPPRESSED_TARGETS.txt <- readLines("8_SALDIVAR_ATR_SUPPRESSED_TARGETS.txt") +Melnick_9_BIOCARTA_NFKB_PATHWAY.txt <- readLines("9_BIOCARTA_NFKB_PATHWAY.txt") +diapause_neg.txt <- readLines("diapause_neg.txt") +diapause_pos_and_neg.txt <- readLines("diapause_pos_and_neg.txt") +diapause_pos.txt <- readLines("diapause_pos.txt") +DTP_sig_150_Down.txt <- readLines("DTP_sig_150_Down.txt") +DTP_sig_150_up.txt <- readLines("DTP_sig_150_up.txt") +Lum_uniq_down.txt <- readLines("Lum_uniq_down.txt") +Lum_uniq_up.txt <- readLines("Lum_uniq_up.txt") +Mes_uniq_down.txt <- readLines("Mes_uniq_down.txt") +Mes_uniq_up.txt <- readLines("Mes_uniq_up.txt") +panDTP_DN.txt <- readLines("new_panDTP_DN.txt") +panDTP_up.txt <- readLines("new_panDTP_up.txt") +mes_DTP_included_DEG_DN.txt <- readLines("new_mes_DTP_included_DEG_DN.txt") +mes_DTP_included_DEG_UP.txt <- readLines("new_mes_DTP_included_DEG_UP.txt") +lum_DTP_included_DEG_DN.txt <- readLines("new_lum_DTP_included_DEG_DN.txt") +lum_DTP_included_DEG_UP.txt <- readLines("new_lum_DTP_included_DEG_UP.txt") +lum_DTP_specific_UP_noCC.txt <- readLines("new_lum_DTP_specific_UP_noCC_.txt") +mes_DTP_specific_UP_noCC.txt <- readLines("new_mes_DTP_specific_UP_noCC_.txt") +``` + +Group all the signatures in one character object: + +```r +All <- c("Melnick_10_GILMORE_CORE_NFKB_PATHWAY.txt","Melnick_11_HALLMARK_MYC_TARGETS_V1.txt","Melnick_12_GO_BETA_CATENIN_BINDING.txt","Melnick_13_PID_BETA_CATENIN_NUC_PATHWAY.txt","Melnick_14_PID_WNT_SIGNALING_PATHWAY.txt","Melnick_15_PID_WNT_CANONICAL_PATHWAY.txt","Melnick_16_Pribluda_SENESCENCE_INFLAMMATORY_GENES.txt","Melnick_17_FRIDMAN_SENESCENCE_DN.txt","Melnick_18_FRIDMAN_SENESCENCE_UP.txt","Melnick_19_DeJONGE_LSC_TOP50_genes.txt","Melnick_1_AML1566_AraC_UP.txt","Melnick_20_GAL_LEUKEMIC_STEM_CELL_UP.txt","Melnick_21_GAL_LEUKEMIC_STEM_CELL_DN.txt","Melnick_22_EPPERT_CE_HSC_LSC.txt","Melnick_23_JAATINEN_HEMATOPOIETIC_STEM_CELL_UP.txt","Melnick_24_JAATINEN_HEMATOPOIETIC_STEM_CELL_DN.txt","Melnick_25_INFLAMMATORY_RESPONSE.txt","Melnick_26_RAMALHO_STEMNESS_DN.txt","Melnick_27_RAMALHO_STEMNESS_UP.txt","Melnick_28_REACTOME_REGULATION_OF_MITOTIC_CELL_CYCLE.txt","Melnick_2_AML1566_AraC_DN.txt","Melnick_3_DUY_CISG_UP.txt","Melnick_4_DUY_CISG_DN.txt","Melnick_5_DIAPAUSE_UP_BOROVIAK.txt","Melnick_6_BOROVIAK_DIAPAUSE_DN.txt","Melnick_7_SASP_COPPE.txt","Melnick_8_SALDIVAR_ATR_SUPPRESSED_TARGETS.txt","Melnick_9_BIOCARTA_NFKB_PATHWAY.txt","diapause_neg.txt","diapause_pos_and_neg.txt","diapause_pos.txt","DTP_sig_150_Down.txt","DTP_sig_150_up.txt","Lum_uniq_down.txt","Lum_uniq_up.txt","Mes_uniq_down.txt","Mes_uniq_up.txt","G0","G1S","G2M","M","MG1","S","panDTP_DN.txt","panDTP_up.txt","mes_DTP_included_DEG_DN.txt","mes_DTP_included_DEG_UP.txt","lum_DTP_included_DEG_DN.txt","lum_DTP_included_DEG_UP.txt","lum_DTP_specific_UP_noCC.txt","mes_DTP_specific_UP_noCC.txt") +``` + +Load your sample iCellR object + +```r +load("BT474_DTP.Robj") +``` + +Score for cell cycle gene signatures with any of the following scoring methods: tirosh, mean, sum, gsva, ssgsea, zscore and plage. +(tirosh and zscore methods are recommended to perform best) + +```r +dat1 <- i.score(my.obj, scoring.List = c("G0","G1S","G2M","M","MG1","S") ,scoring.method = "tirosh",return.stats = TRUE, data.type = "raw.data") +write.table(dat1,"tirosh_G0.tsv",sep="\t") +``` + +Score for all the other signatures (tirosh, mean, sum, gsva, ssgsea, zscore and plage) + +```r +dat2 <- i.score(my.obj, scoring.List = All ,scoring.method = "tirosh",return.stats = TRUE, data.type = "raw.data") +write.table(dat2,"tirosh_all.tsv",sep="\t") +``` + +Prepare data to plot (marge dat1 and dat2) + +```r +dir.create("boxplots_tirosh") +setwd("boxplots_tirosh") + +data <- read.table("../tirosh_all.tsv",sep="\t",header=T) +dataCC <- read.table("../tirosh_G0.tsv",sep="\t",header=T) + +df = as.character(dataCC$assignment.annotation) == "G0" +df[ df == "TRUE" ] <- "GO" +df[ df == "FALSE" ] <- "nonGO" + +data <- cbind(cond = rep("sample",length(df)), + ID = rownames(data), + assignment.annotation = dataCC$assignment.annotation, + GO_nonGO = df, + data) + +write.table((data),file="data.xls",sep="\t", row.names =F) +``` + +Plot all the signatures individually: + +```r +data <- read.table("data.xls",sep="\t",header=T) + +g <- head(data)[5:55] +g <- colnames(g) + +library(ggpubr) + +for(i in g){ + name <- paste("boxplot_",i,".png",sep="") + png(name,width = 6, height = 4, units = 'in', res = 300) + print(ggplot(data, aes(x= GO_nonGO,y=data[, i],fill = GO_nonGO, alpha = 0.5)) + + geom_jitter(size = 0.2, color="black") + + geom_violin(trim=FALSE, col = "black", alpha = 0.5) + + geom_boxplot(outlier.color = NA) + + theme_bw() + + xlab("Condition") + + ylab("Signature Score") + + scale_y_continuous(trans = "log1p") + + stat_compare_means(aes(group = GO_nonGO), label = "p.signif", label.x = 1.5) + + theme(axis.text.x = element_blank())) + dev.off() +} +``` + +Example for "lum_DTP_included_DEG_DN.txt" + +

+ +

+ +To see all the plots made as above go to this link: +https://genome.med.nyu.edu/results/external/iCellR/i.score/test/boxplots_tirosh/ + # How to analyze CITE-seq data using iCellR From 46c5ddad5a99438ecfb5566824f3383ad666d48d Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Fri, 17 Dec 2021 15:50:52 -0500 Subject: [PATCH 46/74] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 20b11ef..d390e2a 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ If you are using FlowJo or SeqGeq, they have made plugins for iCellR and other s For citing iCellR use this [PMID: 34353854](https://cancerdiscovery.aacrjournals.org/content/early/2021/07/28/2159-8290.CD-21-0369) -iCellR publications: [PMID 31744829](https://www.ncbi.nlm.nih.gov/pubmed/31744829) (scRNA-seq), [PMID: 31934613](https://www.ncbi.nlm.nih.gov/pubmed/31934613) (bulk RNA-seq from TCGA), [PMID: 32550269](https://pubmed.ncbi.nlm.nih.gov/32550269/) (scVDJ-seq), [PMID: 34135081](https://jasn.asnjournals.org/content/32/8/1987), [PMID: 33593073](https://www.ahajournals.org/doi/10.1161/CIRCRESAHA.120.317914) +iCellR publications: [PMID: 34911733](https://pubmed.ncbi.nlm.nih.gov/34911733/) (i.score and cell ranking) [PMID 31744829](https://www.ncbi.nlm.nih.gov/pubmed/31744829) (scRNA-seq), [PMID: 31934613](https://www.ncbi.nlm.nih.gov/pubmed/31934613) (bulk RNA-seq from TCGA), [PMID: 32550269](https://pubmed.ncbi.nlm.nih.gov/32550269/) (scVDJ-seq), [PMID: 34135081](https://jasn.asnjournals.org/content/32/8/1987), [PMID: 33593073](https://www.ahajournals.org/doi/10.1161/CIRCRESAHA.120.317914) ### Single (i) Cell R package (iCellR) From 7b162f3ad25b90a491213002b6711714ccb41bb2 Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Tue, 4 Jan 2022 11:08:10 -0500 Subject: [PATCH 47/74] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d390e2a..335c36c 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ If you are using FlowJo or SeqGeq, they have made plugins for iCellR and other s For citing iCellR use this [PMID: 34353854](https://cancerdiscovery.aacrjournals.org/content/early/2021/07/28/2159-8290.CD-21-0369) -iCellR publications: [PMID: 34911733](https://pubmed.ncbi.nlm.nih.gov/34911733/) (i.score and cell ranking) [PMID 31744829](https://www.ncbi.nlm.nih.gov/pubmed/31744829) (scRNA-seq), [PMID: 31934613](https://www.ncbi.nlm.nih.gov/pubmed/31934613) (bulk RNA-seq from TCGA), [PMID: 32550269](https://pubmed.ncbi.nlm.nih.gov/32550269/) (scVDJ-seq), [PMID: 34135081](https://jasn.asnjournals.org/content/32/8/1987), [PMID: 33593073](https://www.ahajournals.org/doi/10.1161/CIRCRESAHA.120.317914) +iCellR publications: [PMID: 34911733](https://pubmed.ncbi.nlm.nih.gov/34911733/) (i.score and cell ranking) [PMID: 34963055](https://www.cell.com/cell/fulltext/S0092-8674(21)01427-6?_returnURL=https%3A%2F%2Flinkinghub.elsevier.com%2Fretrieve%2Fpii%2FS0092867421014276%3Fshowall%3Dtrue) [PMID 31744829](https://www.ncbi.nlm.nih.gov/pubmed/31744829) (scRNA-seq), [PMID: 31934613](https://www.ncbi.nlm.nih.gov/pubmed/31934613) (bulk RNA-seq from TCGA), [PMID: 32550269](https://pubmed.ncbi.nlm.nih.gov/32550269/) (scVDJ-seq), [PMID: 34135081](https://jasn.asnjournals.org/content/32/8/1987), [PMID: 33593073](https://www.ahajournals.org/doi/10.1161/CIRCRESAHA.120.317914) ### Single (i) Cell R package (iCellR) From f5dccaa8279994eb43932b598777c69b2bd3c45a Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Tue, 4 Jan 2022 11:08:50 -0500 Subject: [PATCH 48/74] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 335c36c..f3c4d2a 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ If you are using FlowJo or SeqGeq, they have made plugins for iCellR and other s For citing iCellR use this [PMID: 34353854](https://cancerdiscovery.aacrjournals.org/content/early/2021/07/28/2159-8290.CD-21-0369) -iCellR publications: [PMID: 34911733](https://pubmed.ncbi.nlm.nih.gov/34911733/) (i.score and cell ranking) [PMID: 34963055](https://www.cell.com/cell/fulltext/S0092-8674(21)01427-6?_returnURL=https%3A%2F%2Flinkinghub.elsevier.com%2Fretrieve%2Fpii%2FS0092867421014276%3Fshowall%3Dtrue) [PMID 31744829](https://www.ncbi.nlm.nih.gov/pubmed/31744829) (scRNA-seq), [PMID: 31934613](https://www.ncbi.nlm.nih.gov/pubmed/31934613) (bulk RNA-seq from TCGA), [PMID: 32550269](https://pubmed.ncbi.nlm.nih.gov/32550269/) (scVDJ-seq), [PMID: 34135081](https://jasn.asnjournals.org/content/32/8/1987), [PMID: 33593073](https://www.ahajournals.org/doi/10.1161/CIRCRESAHA.120.317914) +iCellR publications: [PMID: 34911733](https://pubmed.ncbi.nlm.nih.gov/34911733/) (i.score and cell ranking) [PMID: 34963055](https://www.cell.com/cell/fulltext/S0092-8674(21)01427-6?_returnURL=https%3A%2F%2Flinkinghub.elsevier.com%2Fretrieve%2Fpii%2FS0092867421014276%3Fshowall%3Dtrue) (scRNA-seq) [PMID 31744829](https://www.ncbi.nlm.nih.gov/pubmed/31744829) (scRNA-seq), [PMID: 31934613](https://www.ncbi.nlm.nih.gov/pubmed/31934613) (bulk RNA-seq from TCGA), [PMID: 32550269](https://pubmed.ncbi.nlm.nih.gov/32550269/) (scVDJ-seq), [PMID: 34135081](https://jasn.asnjournals.org/content/32/8/1987), [PMID: 33593073](https://www.ahajournals.org/doi/10.1161/CIRCRESAHA.120.317914) ### Single (i) Cell R package (iCellR) From 77abd6ef3bccdbf3b5b1a91a0e6241ef4e183e46 Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Tue, 4 Jan 2022 11:09:47 -0500 Subject: [PATCH 49/74] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f3c4d2a..9cb8085 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ If you are using FlowJo or SeqGeq, they have made plugins for iCellR and other s For citing iCellR use this [PMID: 34353854](https://cancerdiscovery.aacrjournals.org/content/early/2021/07/28/2159-8290.CD-21-0369) -iCellR publications: [PMID: 34911733](https://pubmed.ncbi.nlm.nih.gov/34911733/) (i.score and cell ranking) [PMID: 34963055](https://www.cell.com/cell/fulltext/S0092-8674(21)01427-6?_returnURL=https%3A%2F%2Flinkinghub.elsevier.com%2Fretrieve%2Fpii%2FS0092867421014276%3Fshowall%3Dtrue) (scRNA-seq) [PMID 31744829](https://www.ncbi.nlm.nih.gov/pubmed/31744829) (scRNA-seq), [PMID: 31934613](https://www.ncbi.nlm.nih.gov/pubmed/31934613) (bulk RNA-seq from TCGA), [PMID: 32550269](https://pubmed.ncbi.nlm.nih.gov/32550269/) (scVDJ-seq), [PMID: 34135081](https://jasn.asnjournals.org/content/32/8/1987), [PMID: 33593073](https://www.ahajournals.org/doi/10.1161/CIRCRESAHA.120.317914) +iCellR publications: [PMID: 34911733](https://pubmed.ncbi.nlm.nih.gov/34911733/), (i.score and cell ranking) [PMID: 34963055](https://www.cell.com/cell/fulltext/S0092-8674(21)01427-6?_returnURL=https%3A%2F%2Flinkinghub.elsevier.com%2Fretrieve%2Fpii%2FS0092867421014276%3Fshowall%3Dtrue), (scRNA-seq) [PMID 31744829](https://www.ncbi.nlm.nih.gov/pubmed/31744829) (scRNA-seq), [PMID: 31934613](https://www.ncbi.nlm.nih.gov/pubmed/31934613) (bulk RNA-seq from TCGA), [PMID: 32550269](https://pubmed.ncbi.nlm.nih.gov/32550269/) (scVDJ-seq), [PMID: 34135081](https://jasn.asnjournals.org/content/32/8/1987), [PMID: 33593073](https://www.ahajournals.org/doi/10.1161/CIRCRESAHA.120.317914) ### Single (i) Cell R package (iCellR) From f7e2274f61248f883c1e0fedbc6ccf2522b76c49 Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Tue, 4 Jan 2022 11:10:18 -0500 Subject: [PATCH 50/74] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9cb8085..5f34ee4 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ If you are using FlowJo or SeqGeq, they have made plugins for iCellR and other s For citing iCellR use this [PMID: 34353854](https://cancerdiscovery.aacrjournals.org/content/early/2021/07/28/2159-8290.CD-21-0369) -iCellR publications: [PMID: 34911733](https://pubmed.ncbi.nlm.nih.gov/34911733/), (i.score and cell ranking) [PMID: 34963055](https://www.cell.com/cell/fulltext/S0092-8674(21)01427-6?_returnURL=https%3A%2F%2Flinkinghub.elsevier.com%2Fretrieve%2Fpii%2FS0092867421014276%3Fshowall%3Dtrue), (scRNA-seq) [PMID 31744829](https://www.ncbi.nlm.nih.gov/pubmed/31744829) (scRNA-seq), [PMID: 31934613](https://www.ncbi.nlm.nih.gov/pubmed/31934613) (bulk RNA-seq from TCGA), [PMID: 32550269](https://pubmed.ncbi.nlm.nih.gov/32550269/) (scVDJ-seq), [PMID: 34135081](https://jasn.asnjournals.org/content/32/8/1987), [PMID: 33593073](https://www.ahajournals.org/doi/10.1161/CIRCRESAHA.120.317914) +iCellR publications: [PMID: 34911733](https://pubmed.ncbi.nlm.nih.gov/34911733/) (i.score and cell ranking), [PMID: 34963055](https://www.cell.com/cell/fulltext/S0092-8674(21)01427-6?_returnURL=https%3A%2F%2Flinkinghub.elsevier.com%2Fretrieve%2Fpii%2FS0092867421014276%3Fshowall%3Dtrue) (scRNA-seq), [PMID 31744829](https://www.ncbi.nlm.nih.gov/pubmed/31744829) (scRNA-seq), [PMID: 31934613](https://www.ncbi.nlm.nih.gov/pubmed/31934613) (bulk RNA-seq from TCGA), [PMID: 32550269](https://pubmed.ncbi.nlm.nih.gov/32550269/) (scVDJ-seq), [PMID: 34135081](https://jasn.asnjournals.org/content/32/8/1987), [PMID: 33593073](https://www.ahajournals.org/doi/10.1161/CIRCRESAHA.120.317914) ### Single (i) Cell R package (iCellR) From ce1bfe1dc02bf947233445d70d76748c3062a30b Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Fri, 14 Jan 2022 16:52:11 -0500 Subject: [PATCH 51/74] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5f34ee4..17ee18a 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ If you are using FlowJo or SeqGeq, they have made plugins for iCellR and other s For citing iCellR use this [PMID: 34353854](https://cancerdiscovery.aacrjournals.org/content/early/2021/07/28/2159-8290.CD-21-0369) -iCellR publications: [PMID: 34911733](https://pubmed.ncbi.nlm.nih.gov/34911733/) (i.score and cell ranking), [PMID: 34963055](https://www.cell.com/cell/fulltext/S0092-8674(21)01427-6?_returnURL=https%3A%2F%2Flinkinghub.elsevier.com%2Fretrieve%2Fpii%2FS0092867421014276%3Fshowall%3Dtrue) (scRNA-seq), [PMID 31744829](https://www.ncbi.nlm.nih.gov/pubmed/31744829) (scRNA-seq), [PMID: 31934613](https://www.ncbi.nlm.nih.gov/pubmed/31934613) (bulk RNA-seq from TCGA), [PMID: 32550269](https://pubmed.ncbi.nlm.nih.gov/32550269/) (scVDJ-seq), [PMID: 34135081](https://jasn.asnjournals.org/content/32/8/1987), [PMID: 33593073](https://www.ahajournals.org/doi/10.1161/CIRCRESAHA.120.317914) +iCellR publications: [PMID: 34911733](https://pubmed.ncbi.nlm.nih.gov/34911733/) (i.score and cell ranking), [PMID: 34963055](https://www.cell.com/cell/fulltext/S0092-8674(21)01427-6?_returnURL=https%3A%2F%2Flinkinghub.elsevier.com%2Fretrieve%2Fpii%2FS0092867421014276%3Fshowall%3Dtrue) (scRNA-seq), [PMID 31744829](https://www.ncbi.nlm.nih.gov/pubmed/31744829) (scRNA-seq), [PMID: 31934613](https://www.ncbi.nlm.nih.gov/pubmed/31934613) (bulk RNA-seq from TCGA), [PMID: 32550269](https://pubmed.ncbi.nlm.nih.gov/32550269/) (scVDJ-seq), [PMID: 34135081](https://jasn.asnjournals.org/content/32/8/1987), [PMID: 33593073](https://www.ahajournals.org/doi/10.1161/CIRCRESAHA.120.317914), [PMID: 34634466](https://pubmed.ncbi.nlm.nih.gov/34634466/) ### Single (i) Cell R package (iCellR) From 8283fd02f23b6f4b9e4699cf1de55465aa0802f1 Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Mon, 28 Feb 2022 12:39:50 -0500 Subject: [PATCH 52/74] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 17ee18a..c3f54c9 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ If you are using FlowJo or SeqGeq, they have made plugins for iCellR and other s For citing iCellR use this [PMID: 34353854](https://cancerdiscovery.aacrjournals.org/content/early/2021/07/28/2159-8290.CD-21-0369) -iCellR publications: [PMID: 34911733](https://pubmed.ncbi.nlm.nih.gov/34911733/) (i.score and cell ranking), [PMID: 34963055](https://www.cell.com/cell/fulltext/S0092-8674(21)01427-6?_returnURL=https%3A%2F%2Flinkinghub.elsevier.com%2Fretrieve%2Fpii%2FS0092867421014276%3Fshowall%3Dtrue) (scRNA-seq), [PMID 31744829](https://www.ncbi.nlm.nih.gov/pubmed/31744829) (scRNA-seq), [PMID: 31934613](https://www.ncbi.nlm.nih.gov/pubmed/31934613) (bulk RNA-seq from TCGA), [PMID: 32550269](https://pubmed.ncbi.nlm.nih.gov/32550269/) (scVDJ-seq), [PMID: 34135081](https://jasn.asnjournals.org/content/32/8/1987), [PMID: 33593073](https://www.ahajournals.org/doi/10.1161/CIRCRESAHA.120.317914), [PMID: 34634466](https://pubmed.ncbi.nlm.nih.gov/34634466/) +iCellR publications: [PMID: 35180378](https://pubmed.ncbi.nlm.nih.gov/35180378/) (CITE-Seq), [PMID: 34911733](https://pubmed.ncbi.nlm.nih.gov/34911733/) (i.score and cell ranking), [PMID: 34963055](https://www.cell.com/cell/fulltext/S0092-8674(21)01427-6?_returnURL=https%3A%2F%2Flinkinghub.elsevier.com%2Fretrieve%2Fpii%2FS0092867421014276%3Fshowall%3Dtrue) (scRNA-seq), [PMID 31744829](https://www.ncbi.nlm.nih.gov/pubmed/31744829) (scRNA-seq), [PMID: 31934613](https://www.ncbi.nlm.nih.gov/pubmed/31934613) (bulk RNA-seq from TCGA), [PMID: 32550269](https://pubmed.ncbi.nlm.nih.gov/32550269/) (scVDJ-seq), [PMID: 34135081](https://jasn.asnjournals.org/content/32/8/1987), [PMID: 33593073](https://www.ahajournals.org/doi/10.1161/CIRCRESAHA.120.317914), [PMID: 34634466](https://pubmed.ncbi.nlm.nih.gov/34634466/) ### Single (i) Cell R package (iCellR) From 6e3998e1ce579763c199522cad451ca3ac602674 Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Mon, 28 Feb 2022 12:42:02 -0500 Subject: [PATCH 53/74] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c3f54c9..b3441a2 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ If you are using FlowJo or SeqGeq, they have made plugins for iCellR and other s For citing iCellR use this [PMID: 34353854](https://cancerdiscovery.aacrjournals.org/content/early/2021/07/28/2159-8290.CD-21-0369) -iCellR publications: [PMID: 35180378](https://pubmed.ncbi.nlm.nih.gov/35180378/) (CITE-Seq), [PMID: 34911733](https://pubmed.ncbi.nlm.nih.gov/34911733/) (i.score and cell ranking), [PMID: 34963055](https://www.cell.com/cell/fulltext/S0092-8674(21)01427-6?_returnURL=https%3A%2F%2Flinkinghub.elsevier.com%2Fretrieve%2Fpii%2FS0092867421014276%3Fshowall%3Dtrue) (scRNA-seq), [PMID 31744829](https://www.ncbi.nlm.nih.gov/pubmed/31744829) (scRNA-seq), [PMID: 31934613](https://www.ncbi.nlm.nih.gov/pubmed/31934613) (bulk RNA-seq from TCGA), [PMID: 32550269](https://pubmed.ncbi.nlm.nih.gov/32550269/) (scVDJ-seq), [PMID: 34135081](https://jasn.asnjournals.org/content/32/8/1987), [PMID: 33593073](https://www.ahajournals.org/doi/10.1161/CIRCRESAHA.120.317914), [PMID: 34634466](https://pubmed.ncbi.nlm.nih.gov/34634466/) +iCellR publications: [PMID: 35180378](https://pubmed.ncbi.nlm.nih.gov/35180378/) (CITE-seq), [PMID: 34911733](https://pubmed.ncbi.nlm.nih.gov/34911733/) (i.score and cell ranking), [PMID: 34963055](https://www.cell.com/cell/fulltext/S0092-8674(21)01427-6?_returnURL=https%3A%2F%2Flinkinghub.elsevier.com%2Fretrieve%2Fpii%2FS0092867421014276%3Fshowall%3Dtrue) (scRNA-seq), [PMID 31744829](https://www.ncbi.nlm.nih.gov/pubmed/31744829) (scRNA-seq), [PMID: 31934613](https://www.ncbi.nlm.nih.gov/pubmed/31934613) (bulk RNA-seq from TCGA), [PMID: 32550269](https://pubmed.ncbi.nlm.nih.gov/32550269/) (scVDJ-seq), [PMID: 34135081](https://jasn.asnjournals.org/content/32/8/1987), [PMID: 33593073](https://www.ahajournals.org/doi/10.1161/CIRCRESAHA.120.317914), [PMID: 34634466](https://pubmed.ncbi.nlm.nih.gov/34634466/) ### Single (i) Cell R package (iCellR) From e9f661f79d5dd6150f5464a8ec2bf4dbe79e110b Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Mon, 21 Mar 2022 18:20:28 -0400 Subject: [PATCH 54/74] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b3441a2..b50f494 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ If you are using FlowJo or SeqGeq, they have made plugins for iCellR and other s For citing iCellR use this [PMID: 34353854](https://cancerdiscovery.aacrjournals.org/content/early/2021/07/28/2159-8290.CD-21-0369) -iCellR publications: [PMID: 35180378](https://pubmed.ncbi.nlm.nih.gov/35180378/) (CITE-seq), [PMID: 34911733](https://pubmed.ncbi.nlm.nih.gov/34911733/) (i.score and cell ranking), [PMID: 34963055](https://www.cell.com/cell/fulltext/S0092-8674(21)01427-6?_returnURL=https%3A%2F%2Flinkinghub.elsevier.com%2Fretrieve%2Fpii%2FS0092867421014276%3Fshowall%3Dtrue) (scRNA-seq), [PMID 31744829](https://www.ncbi.nlm.nih.gov/pubmed/31744829) (scRNA-seq), [PMID: 31934613](https://www.ncbi.nlm.nih.gov/pubmed/31934613) (bulk RNA-seq from TCGA), [PMID: 32550269](https://pubmed.ncbi.nlm.nih.gov/32550269/) (scVDJ-seq), [PMID: 34135081](https://jasn.asnjournals.org/content/32/8/1987), [PMID: 33593073](https://www.ahajournals.org/doi/10.1161/CIRCRESAHA.120.317914), [PMID: 34634466](https://pubmed.ncbi.nlm.nih.gov/34634466/) +iCellR publications: [PMID: 35180378](https://pubmed.ncbi.nlm.nih.gov/35180378/) (CITE-seq), [PMID: 34911733](https://pubmed.ncbi.nlm.nih.gov/34911733/) (i.score and cell ranking), [PMID: 34963055](https://www.cell.com/cell/fulltext/S0092-8674(21)01427-6?_returnURL=https%3A%2F%2Flinkinghub.elsevier.com%2Fretrieve%2Fpii%2FS0092867421014276%3Fshowall%3Dtrue) (scRNA-seq), [PMID 31744829](https://www.ncbi.nlm.nih.gov/pubmed/31744829) (scRNA-seq), [PMID: 31934613](https://www.ncbi.nlm.nih.gov/pubmed/31934613) (bulk RNA-seq from TCGA), [PMID: 32550269](https://pubmed.ncbi.nlm.nih.gov/32550269/) (scVDJ-seq), [PMID: 34135081](https://jasn.asnjournals.org/content/32/8/1987), [PMID: 33593073](https://www.ahajournals.org/doi/10.1161/CIRCRESAHA.120.317914), [PMID: 34634466](https://pubmed.ncbi.nlm.nih.gov/34634466/), [PMID: 35302059](https://pubmed.ncbi.nlm.nih.gov/35302059/) ### Single (i) Cell R package (iCellR) From 45ada27e9e6c296df30eb442b0d56d07dd303473 Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Mon, 21 Mar 2022 18:21:12 -0400 Subject: [PATCH 55/74] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b50f494..11af676 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,8 @@ If you are using FlowJo or SeqGeq, they have made plugins for iCellR and other s For citing iCellR use this [PMID: 34353854](https://cancerdiscovery.aacrjournals.org/content/early/2021/07/28/2159-8290.CD-21-0369) -iCellR publications: [PMID: 35180378](https://pubmed.ncbi.nlm.nih.gov/35180378/) (CITE-seq), [PMID: 34911733](https://pubmed.ncbi.nlm.nih.gov/34911733/) (i.score and cell ranking), [PMID: 34963055](https://www.cell.com/cell/fulltext/S0092-8674(21)01427-6?_returnURL=https%3A%2F%2Flinkinghub.elsevier.com%2Fretrieve%2Fpii%2FS0092867421014276%3Fshowall%3Dtrue) (scRNA-seq), [PMID 31744829](https://www.ncbi.nlm.nih.gov/pubmed/31744829) (scRNA-seq), [PMID: 31934613](https://www.ncbi.nlm.nih.gov/pubmed/31934613) (bulk RNA-seq from TCGA), [PMID: 32550269](https://pubmed.ncbi.nlm.nih.gov/32550269/) (scVDJ-seq), [PMID: 34135081](https://jasn.asnjournals.org/content/32/8/1987), [PMID: 33593073](https://www.ahajournals.org/doi/10.1161/CIRCRESAHA.120.317914), [PMID: 34634466](https://pubmed.ncbi.nlm.nih.gov/34634466/), [PMID: 35302059](https://pubmed.ncbi.nlm.nih.gov/35302059/) +iCellR publications: [PMID: 35180378](https://pubmed.ncbi.nlm.nih.gov/35180378/) (CITE-seq), [PMID: 34911733](https://pubmed.ncbi.nlm.nih.gov/34911733/) (i.score and cell ranking), [PMID: 34963055](https://www.cell.com/cell/fulltext/S0092-8674(21)01427-6?_returnURL=https%3A%2F%2Flinkinghub.elsevier.com%2Fretrieve%2Fpii%2FS0092867421014276%3Fshowall%3Dtrue) (scRNA-seq), [PMID 31744829](https://www.ncbi.nlm.nih.gov/pubmed/31744829) (scRNA-seq), [PMID: 31934613](https://www.ncbi.nlm.nih.gov/pubmed/31934613) (bulk RNA-seq from TCGA), [PMID: 32550269](https://pubmed.ncbi.nlm.nih.gov/32550269/) (scVDJ-seq), [PMID: 34135081](https://jasn.asnjournals.org/content/32/8/1987), [PMID: 33593073](https://www.ahajournals.org/doi/10.1161/CIRCRESAHA.120.317914), [PMID: 34634466](https://pubmed.ncbi.nlm.nih.gov/34634466/), [PMID: 35302059](https://pubmed.ncbi.nlm.nih.gov/35302059/), [PMID: 34353854](https://cancerdiscovery.aacrjournals.org/content/early/2021/07/28/2159-8290.CD-21-0369) + ### Single (i) Cell R package (iCellR) From f1015f328e6af34618fca99a6386f1ffbe246d3c Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Tue, 22 Mar 2022 15:07:03 -0400 Subject: [PATCH 56/74] Update README.md --- README.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 11af676..688fce1 100644 --- a/README.md +++ b/README.md @@ -621,20 +621,23 @@ grid.arrange(A,B,C,D) ### or + +png('AllConds_clusts_knetl.png', width = 16, height = 8, units = 'in', res = 300) cluster.plot(my.obj, - cell.size = 0.5, + cell.size = 0.1, plot.type = "knetl", cell.color = "black", back.col = "white", - col.by = "conditions", cell.transparency = 1, clust.dim = 2, interactive = F,cond.facet = T) -``` +dev.off() +``` +

- +

- Pseudotime Abstract KNetL map (PAK map) From 988a28a051dcd3bbf385ad47f1608d3872d4420b Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Mon, 28 Mar 2022 12:29:19 -0400 Subject: [PATCH 57/74] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 688fce1..4cee961 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ [![CRAN Version](https://www.r-pkg.org/badges/version/iCellR)](https://cran.r-project.org/package=iCellR) [![CRAN Downloads](https://cranlogs.r-pkg.org/badges/iCellR)](https://cran.r-project.org/package=iCellR) +[![CRAN Downloads](https://cranlogs.r-pkg.org/badges/grand-total/iCellR)](https://cran.r-project.org/package=iCellR) [![License: GPL v2](https://img.shields.io/badge/License-GPL%20v2-blue.svg)](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html) # iCellR From f850f8751cc44399803ad2e0c671a7020a002cb7 Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Mon, 4 Apr 2022 17:40:32 -0400 Subject: [PATCH 58/74] Update README.md --- README.md | 117 ++++++++++++++++++++++++++++++++---------------------- 1 file changed, 69 insertions(+), 48 deletions(-) diff --git a/README.md b/README.md index 4cee961..efff7a0 100644 --- a/README.md +++ b/README.md @@ -3262,35 +3262,40 @@ Merging scATAC files with different intervals (as dipicted in bedtools website)

``` -# Let's say you have 3 files that you need to merege +# Let's say you have 2 files that you need to merege # example file -head(File1)[1:3] -# AAACAGCCAAGTGAAC.1 AAACAGCCACTGACCG.1 AAACAGCCATGATTGT.1 -#chr1.181218.181695 0 0 1 -#chr1.191296.191699 0 0 0 -#chr1.629770.630129 0 0 0 -#chr1.633806.634251 0 0 0 -#chr1.778422.779040 0 0 0 -#chr1.827306.827702 0 0 0 +C <- load10x("count-JJsn_C_cDNA/",gene.name = 2) +M <- load10x("count-JJsn_M_cDNA/",gene.name = 2) + +ATAC.C <- grep("^chr",row.names(C),value=T) +ATAC.M <- grep("^chr",row.names(M),value=T) -# get the row names from each file and concatenate them as below: +MyATAC.C <- subset(C, row.names(C) %in% ATAC.C) +MyATAC.M <- subset(M, row.names(M) %in% ATAC.M) -f1 <- row.names(File1) -f2 <- row.names(File2) -f3 <- row.names(File3) +head(MyATAC.C)[1:3] -all.peaks <- c(f1,f2,f3) -head(all.peaks) -#[1] "chr1.181218.181695" "chr1.191296.191699" "chr1.629770.630129" -#[4] "chr1.633806.634251" "chr1.778422.779040" "chr1.827306.827702" +C <- MyATAC.C +M <- MyATAC.M +dim(C) +#[1] 58678 4211 +dim(M) +#[1] 57776 4736 + +f1 <- row.names(C) +f2 <- row.names(M) + +all.peaks <- c(f1,f2) +length(all.peaks) +#[1] 116454 + +# make a bed file chr <- as.character(as.matrix(data.frame(do.call('rbind', strsplit(as.character(all.peaks),'.',fixed=TRUE)))[1])) start <- data.frame(do.call('rbind', strsplit(as.character(all.peaks),'.',fixed=TRUE)))[2] end <- data.frame(do.call('rbind', strsplit(as.character(all.peaks),'.',fixed=TRUE)))[3] -# make a bed file - DAT <- as.data.frame(chr) DAT$start <- as.numeric(as.matrix(start)) DAT$end <- as.numeric(as.matrix(end)) @@ -3303,8 +3308,7 @@ head(DAT) #5 chr1 778422 779040 #6 chr1 827306 827702 -# make a GenomicRanges object - +# make Genomic Ranges library("GenomicRanges") all.gr <- GRanges(seqnames=DAT$chr,ranges=IRanges(start=DAT$start,end=DAT$end)) @@ -3327,16 +3331,21 @@ all.gr # ------- # seqinfo: 1 sequence from an unspecified genome; no seqlengths -# sort and merge the peaks +################## sort and merge the peaks mrg <- reduce(all.gr) -########################## choose file and give name +#Before merge +length(all.gr) +#[1] 116454 +#after merge +length(mrg) +#[1] 71426 +########################## choose file and give name MyFile <- f1 name="f1_new.bed" - -########################## copy paste the code here to make a new bed file +########################## copy paste the code here to make a new bed file ########################## the new bed has the old and new intervals (new intervals to be replaced with old) chr <- as.character(as.matrix(data.frame(do.call('rbind', strsplit(as.character(MyFile),'.',fixed=TRUE)))[1])) @@ -3351,18 +3360,43 @@ MyFile <- DAT # make intrval file to replace to new regions MyFile.gr <- GRanges(seqnames=MyFile$chr,ranges=IRanges(start=MyFile$start,end=MyFile$end)) -F <- subsetByOverlaps(MyFile.gr,mrg) -M <- subsetByOverlaps(mrg,MyFile.gr) -### -chr <- as.character(F@seqnames) +OverLap <- findOverlaps(MyFile.gr, mrg) + +OLD1 <- (OverLap@from) +NEW1 <- (OverLap@to) + +OLD = MyFile.gr[OLD1] +NEW = mrg[NEW1] + +chr <- as.character(OLD@seqnames) DAT <- as.data.frame(chr) -DAT$start <- F@ranges@start -DAT$end <- (F@ranges@start + F@ranges@width) - 1 -DAT$new.chr<- as.character(M@seqnames) -DAT$new.start <- M@ranges@start -DAT$new.end <- (M@ranges@start + M@ranges@width) - 1 +DAT$start <- OLD@ranges@start +DAT$end <- (OLD@ranges@start + OLD@ranges@width) - 1 + +DAT$new.chr<- as.character(NEW@seqnames) +DAT$new.start <- NEW@ranges@start +DAT$new.end <- (NEW@ranges@start + NEW@ranges@width) - 1 + +head(DAT) +# chr start end new.chr new.start new.end +#1 chr1 3247563 3248453 chr1 3247563 3248453 +#2 chr1 3360706 3361554 chr1 3360706 3361554 +#3 chr1 3552372 3553230 chr1 3552372 3553230 +#4 chr1 3645171 3646034 chr1 3645093 3646034 +#5 chr1 3670318 3671081 chr1 3670318 3671090 +#6 chr1 3671326 3672230 chr1 3671314 3672230 + +dim(DAT) +#58678 6 +length(MyFile.gr) +#58678 + # diff -ADD <- setdiff(mrg,MyFile.gr) + +have = mrg[unique(NEW1)] +dontHave = mrg[-unique(NEW1)] + +ADD <- dontHave L <- length(as.character(ADD@seqnames)) chr <-rep("NA",L) DAT1 <- as.data.frame(chr) @@ -3378,19 +3412,6 @@ Final.DAT <- rbind(DAT,DAT1) write.table(Final.DAT,name,row.names=FALSE,sep="\t", quote = FALSE) -# example file -# head(Final.DAT,10) -# chr start end new.chr new.start new.end -#1 chr1 181218 181695 chr1 181218 181695 -#2 chr1 191296 191699 chr1 191296 191699 -#3 chr1 629770 630129 chr1 629770 630129 -#4 chr1 633806 634251 chr1 633806 634251 -#5 chr1 778422 779040 chr1 778422 779040 -#6 chr1 827306 827702 chr1 827306 827702 -#7 NA NA NA chr1 904635 904943 -#8 NA NA NA chr1 923684 924085 -#9 NA NA NA chr1 940590 940783 -#10 NA NA NA chr1 959052 959594 # The first 3 columns are the original peaks and the last 3 are the ones that need to be replaced with original one. The NA peaks would also get the new peak ids but in the matrix the cells will have 0 for expressions. To do this use the iCellR function replace.peak.id. From 2a28de7f2a5b5b1a0c384dd2bebab4ba9467abff Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Mon, 4 Apr 2022 17:44:11 -0400 Subject: [PATCH 59/74] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index efff7a0..682e6ba 100644 --- a/README.md +++ b/README.md @@ -3412,12 +3412,12 @@ Final.DAT <- rbind(DAT,DAT1) write.table(Final.DAT,name,row.names=FALSE,sep="\t", quote = FALSE) +### reapeat this process for f2 (M) as well # The first 3 columns are the original peaks and the last 3 are the ones that need to be replaced with original one. The NA peaks would also get the new peak ids but in the matrix the cells will have 0 for expressions. To do this use the iCellR function replace.peak.id. -MyATAC1 <- replace.peak.id(atac.data=MyATAC1, bed.file = Final.DAT) -MyATAC2 <- replace.peak.id(atac.data=MyATAC2, bed.file = Final.DAT) -MyATAC3 <- replace.peak.id(atac.data=MyATAC3, bed.file = Final.DAT) +MyATAC.C <- replace.peak.id(atac.data=MyATAC.C, bed.file = Final.DAT.C) +MyATAC.M <- replace.peak.id(atac.data=MyATAC.M, bed.file = Final.DAT.M) # finally aggregate the samples and add to iCellR object From c055f9b9594bc166d8ef05c23efac8745c86479a Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Mon, 20 Jun 2022 11:30:04 -0400 Subject: [PATCH 60/74] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 682e6ba..e02150b 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ If you are using FlowJo or SeqGeq, they have made plugins for iCellR and other s For citing iCellR use this [PMID: 34353854](https://cancerdiscovery.aacrjournals.org/content/early/2021/07/28/2159-8290.CD-21-0369) -iCellR publications: [PMID: 35180378](https://pubmed.ncbi.nlm.nih.gov/35180378/) (CITE-seq), [PMID: 34911733](https://pubmed.ncbi.nlm.nih.gov/34911733/) (i.score and cell ranking), [PMID: 34963055](https://www.cell.com/cell/fulltext/S0092-8674(21)01427-6?_returnURL=https%3A%2F%2Flinkinghub.elsevier.com%2Fretrieve%2Fpii%2FS0092867421014276%3Fshowall%3Dtrue) (scRNA-seq), [PMID 31744829](https://www.ncbi.nlm.nih.gov/pubmed/31744829) (scRNA-seq), [PMID: 31934613](https://www.ncbi.nlm.nih.gov/pubmed/31934613) (bulk RNA-seq from TCGA), [PMID: 32550269](https://pubmed.ncbi.nlm.nih.gov/32550269/) (scVDJ-seq), [PMID: 34135081](https://jasn.asnjournals.org/content/32/8/1987), [PMID: 33593073](https://www.ahajournals.org/doi/10.1161/CIRCRESAHA.120.317914), [PMID: 34634466](https://pubmed.ncbi.nlm.nih.gov/34634466/), [PMID: 35302059](https://pubmed.ncbi.nlm.nih.gov/35302059/), [PMID: 34353854](https://cancerdiscovery.aacrjournals.org/content/early/2021/07/28/2159-8290.CD-21-0369) +iCellR publications: [PMID: 35660135](https://pubmed.ncbi.nlm.nih.gov/35660135/) (scRNA-seq/KNetL) [PMID: 35180378](https://pubmed.ncbi.nlm.nih.gov/35180378/) (CITE-seq), [PMID: 34911733](https://pubmed.ncbi.nlm.nih.gov/34911733/) (i.score and cell ranking), [PMID: 34963055](https://www.cell.com/cell/fulltext/S0092-8674(21)01427-6?_returnURL=https%3A%2F%2Flinkinghub.elsevier.com%2Fretrieve%2Fpii%2FS0092867421014276%3Fshowall%3Dtrue) (scRNA-seq), [PMID 31744829](https://www.ncbi.nlm.nih.gov/pubmed/31744829) (scRNA-seq), [PMID: 31934613](https://www.ncbi.nlm.nih.gov/pubmed/31934613) (bulk RNA-seq from TCGA), [PMID: 32550269](https://pubmed.ncbi.nlm.nih.gov/32550269/) (scVDJ-seq), [PMID: 34135081](https://jasn.asnjournals.org/content/32/8/1987), [PMID: 33593073](https://www.ahajournals.org/doi/10.1161/CIRCRESAHA.120.317914), [PMID: 34634466](https://pubmed.ncbi.nlm.nih.gov/34634466/), [PMID: 35302059](https://pubmed.ncbi.nlm.nih.gov/35302059/), [PMID: 34353854](https://cancerdiscovery.aacrjournals.org/content/early/2021/07/28/2159-8290.CD-21-0369) ### Single (i) Cell R package (iCellR) From 890d547a45cd5f96ac2ad7d427335aabd1102dee Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Tue, 13 Jun 2023 07:52:10 -0400 Subject: [PATCH 61/74] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e02150b..bca17bf 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ [![CRAN Downloads](https://cranlogs.r-pkg.org/badges/grand-total/iCellR)](https://cran.r-project.org/package=iCellR) [![License: GPL v2](https://img.shields.io/badge/License-GPL%20v2-blue.svg)](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html) -# iCellR +# iCellR (some links don't work temporarily and will be fixed next week on June 21st) iCellR is an interactive R package to work with high-throughput single cell sequencing technologies (i.e scRNA-seq, scVDJ-seq, scATAC-seq, CITE-Seq and Spatial Transcriptomics (ST)). ### News (April 2021): Use iCellR version 1.6.4 for scATAC-seq and Spatial Transcriptomics (ST). Use the [i.score](https://github.com/rezakj/iCellR/wiki/i.score) function for scoring (scoring cells based on gene signatures) methods (i.e. tirosh, mean, sum, gsva, ssgsea, zscore and plage). From 29bd29c3a7ba70e40920a45f91e46af83db0af27 Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Mon, 19 Jun 2023 12:02:27 -0400 Subject: [PATCH 62/74] Update README.md --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index bca17bf..31c750a 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ [![CRAN Downloads](https://cranlogs.r-pkg.org/badges/grand-total/iCellR)](https://cran.r-project.org/package=iCellR) [![License: GPL v2](https://img.shields.io/badge/License-GPL%20v2-blue.svg)](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html) -# iCellR (some links don't work temporarily and will be fixed next week on June 21st) +# iCellR iCellR is an interactive R package to work with high-throughput single cell sequencing technologies (i.e scRNA-seq, scVDJ-seq, scATAC-seq, CITE-Seq and Spatial Transcriptomics (ST)). ### News (April 2021): Use iCellR version 1.6.4 for scATAC-seq and Spatial Transcriptomics (ST). Use the [i.score](https://github.com/rezakj/iCellR/wiki/i.score) function for scoring (scoring cells based on gene signatures) methods (i.e. tirosh, mean, sum, gsva, ssgsea, zscore and plage). @@ -306,7 +306,7 @@ my.obj <- norm.data(my.obj, - Scale data (optional) -iCellR does not need this step as it scales the data when they need to be scaled on the fly; like for plotting or running PCA. This is because, it is important to use the untransformed data for differential expression analysis to calculate the accurate/true fold changes. If you run this function the scaled data will replace the main data for this reason and instead will be saved in different data slot in the object for you to download if you need it for plotting or other reasons. +iCellR does not need this step as it scales the data when they need to be scaled on the fly; like for plotting or running PCA. This is because, it is important to use the untransformed data for differential expression analysis to calculate the accurate/true fold changes. If you run this function the scaled data will "not" replace the main data and instead will be saved in different data slot in the object. ```r # my.obj <- data.scale(my.obj) @@ -342,7 +342,7 @@ This function will help you find a good number of genes to use for running PCA. # See model plot make.gene.model(my.obj, my.out.put = "plot", dispersion.limit = 1.5, - base.mean.rank = 500, + base.mean.rank = 1500, no.mito.model = T, mark.mito = T, interactive = F, @@ -352,7 +352,7 @@ make.gene.model(my.obj, my.out.put = "plot", my.obj <- make.gene.model(my.obj, my.out.put = "data", dispersion.limit = 1.5, - base.mean.rank = 500, + base.mean.rank = 1500, no.mito.model = T, mark.mito = T, interactive = F, @@ -364,7 +364,7 @@ head(my.obj@gene.model) # get html plot (optional) #make.gene.model(my.obj, my.out.put = "plot", # dispersion.limit = 1.5, -# base.mean.rank = 500, +# base.mean.rank = 1500, # no.mito.model = T, # mark.mito = T, # interactive = T, @@ -424,7 +424,7 @@ my.obj <- run.umap(my.obj, dims = 1:10) # KNetL (for lager than 5000 cell use a zoom of about 400) # Because knetl has a very high resolution it's best to use a dim of 20 (this usually works best for most data) -my.obj <- run.knetl(my.obj, dims = 1:20, zoom = 110, dim.redux = "umap") # (Important note!) don't forget to set the zoom in the right range +my.obj <- run.knetl(my.obj, dims = 1:20, zoom = 110) # (Important note!) don't forget to set the zoom in the right range ########################## IMPORTANT DISCLAIMER NOTE ########################### *** KNetL map is very dynamic with zoom and dims! *** From 873e06f49640463f8a4a3ec78ce0a25db66503f4 Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Fri, 11 Aug 2023 16:05:24 -0400 Subject: [PATCH 63/74] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 31c750a..12589e5 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ install.packages("iCellR") setwd("/your/download/directory") # save the URL as an object -sample.file.url = "https://genome.med.nyu.edu/results/external/iCellR/data/pbmc3k_filtered_gene_bc_matrices.tar.gz" +sample.file.url = "https://cf.10xgenomics.com/samples/cell/pbmc3k/pbmc3k_filtered_gene_bc_matrices.tar.gz" # download the file download.file(url = sample.file.url, From ef87e4948f1c4470d5a7d9dc936b1a3189f39bc0 Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Mon, 9 Oct 2023 12:21:04 -0400 Subject: [PATCH 64/74] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 12589e5..d9c6907 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,8 @@ # iCellR iCellR is an interactive R package to work with high-throughput single cell sequencing technologies (i.e scRNA-seq, scVDJ-seq, scATAC-seq, CITE-Seq and Spatial Transcriptomics (ST)). +## Maintainer: [Alireza Khodadadi-Jamayran](https://scholar.google.com/scholar?q=author:%22Khodadadi-Jamayran%20A%22) + ### News (April 2021): Use iCellR version 1.6.4 for scATAC-seq and Spatial Transcriptomics (ST). Use the [i.score](https://github.com/rezakj/iCellR/wiki/i.score) function for scoring (scoring cells based on gene signatures) methods (i.e. tirosh, mean, sum, gsva, ssgsea, zscore and plage). ### News (July 2020): See iCellR version 1.5.5 with new cell cycle analysis for G0, G1S, G2M, M, G1M and S [phase](https://genome.med.nyu.edu/results/external/iCellR/example1/All_cellcycle.png), Pseudotime Abstract KNetL map [(PAK map)](https://genome.med.nyu.edu/results/external/iCellR/example1/pseudotime.KNetL.png) and gene-gene [correlations](https://genome.med.nyu.edu/results/external/iCellR/example1/gene-gene.correlation.png). See below for how to. From 0c2b32f8a7dd8a8d58d9084ab225b6721608a291 Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Mon, 9 Oct 2023 12:21:34 -0400 Subject: [PATCH 65/74] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d9c6907..e4d68ae 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ # iCellR iCellR is an interactive R package to work with high-throughput single cell sequencing technologies (i.e scRNA-seq, scVDJ-seq, scATAC-seq, CITE-Seq and Spatial Transcriptomics (ST)). -## Maintainer: [Alireza Khodadadi-Jamayran](https://scholar.google.com/scholar?q=author:%22Khodadadi-Jamayran%20A%22) +Maintainer: [Alireza Khodadadi-Jamayran](https://scholar.google.com/scholar?q=author:%22Khodadadi-Jamayran%20A%22) ### News (April 2021): Use iCellR version 1.6.4 for scATAC-seq and Spatial Transcriptomics (ST). Use the [i.score](https://github.com/rezakj/iCellR/wiki/i.score) function for scoring (scoring cells based on gene signatures) methods (i.e. tirosh, mean, sum, gsva, ssgsea, zscore and plage). From 1a6953d1117d2080e3428527c5f22e6a12c26782 Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Mon, 29 Jan 2024 13:36:31 -0500 Subject: [PATCH 66/74] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index e4d68ae..8bedb5c 100644 --- a/README.md +++ b/README.md @@ -104,6 +104,7 @@ my.data <- load10x("filtered_gene_bc_matrices/hg19/") # my.data <- read.delim("CITE-Seq_sample_RNA.tsv.gz",header=TRUE) # if your data is in a h5 format read it like this example +# library(hdf5r) # data <- load.h5("filtered_feature_bc_matrix.h5") ``` From 66b50beae3e5f56baddeb7a0f8a54e74ac6e980e Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Tue, 6 Feb 2024 10:23:21 -0500 Subject: [PATCH 67/74] Update README.md --- README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/README.md b/README.md index 8bedb5c..975c7a8 100644 --- a/README.md +++ b/README.md @@ -942,6 +942,18 @@ heatmap.gg.plot(my.obj, gene = MyGenes, interactive = F, cluster.by = "none", da

+- Bubble heatmap + +```r +png('heatmap_bubble_gg_genes.png', width = 10, height = 20, units = 'in', res = 300) +bubble.gg.plot(my.obj, gene = MyGenes, interactive = F, conds.to.plot = NULL, size = "Percent.Expressed",colour = "Expression") +dev.off() +``` +

+ + +

+ - Plot genes ```r From ab7bb7848b5f04869998525401aff9e3cb3537e3 Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Tue, 6 Feb 2024 10:24:28 -0500 Subject: [PATCH 68/74] Update README.md --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 975c7a8..18941fd 100644 --- a/README.md +++ b/README.md @@ -950,7 +950,6 @@ bubble.gg.plot(my.obj, gene = MyGenes, interactive = F, conds.to.plot = NULL, si dev.off() ```

-

From 99917967c4487c15e4be2e04396f4591b26ed65b Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Tue, 6 Feb 2024 15:18:04 -0500 Subject: [PATCH 69/74] Update README.md --- README.md | 49 +++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 43 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 18941fd..6d6c371 100644 --- a/README.md +++ b/README.md @@ -2408,14 +2408,51 @@ my.obj <- add.vdj(demo.obj, vdj.data = My.VDJ) Another example with multiple files ```r -# first prepare the files. -# this function would filter the files, calculate clonotype frequencies and proportions and add conditions to the cell ids. -my.vdj.1 <- prep.vdj(vdj.data = "all_contig_annotations.csv", cond.name = "WT") -my.vdj.2 <- prep.vdj(vdj.data = "all_contig_annotations.csv", cond.name = "KO") -my.vdj.3 <- prep.vdj(vdj.data = "all_contig_annotations.csv", cond.name = "Ctrl") +# First read the vdj data + +File="all_contig_annotations.csv" +my.vdj.data <- read.csv(File) + +# then see the conditions +my.obj + +# For each condition (WT,KO, ...) subset from the VDJ data + +Get="WT" +####### +dat <- colnames(my.obj@main.data) +name <- paste(Get,".tsv",sep="") +do <- grep(Get,dat, value=T) +do <- as.character(as.matrix(data.frame(do.call('rbind', strsplit(as.character(do),'_',fixed=TRUE)))[2])) +do <- gsub("\\.","-",do) +do <- subset(my.vdj.data, my.vdj.data$barcode %in% do) +write.table((do),file=name,sep="\t", row.names =F) +####### + +Get="KO" +####### +dat <- colnames(my.obj@main.data) +name <- paste(Get,".tsv",sep="") +do <- grep(Get,dat, value=T) +do <- as.character(as.matrix(data.frame(do.call('rbind', strsplit(as.character(do),'_',fixed=TRUE)))[2])) +do <- gsub("\\.","-",do) +do <- subset(my.vdj.data, my.vdj.data$barcode %in% do) +write.table((do),file=name,sep="\t", row.names =F) +####### + +#### read and prep all conditions +Get="WT" +name <- paste(Get,".tsv",sep="") +do <- read.table(name, header=T) +WT <- prep.vdj(vdj.data = do, cond.name = Get) + +Get="KO" +name <- paste(Get,".tsv",sep="") +do <- read.table(name, header=T) +KO <- prep.vdj(vdj.data = do, cond.name = Get) # concatenate all the conditions -my.vdj.data <- rbind(my.vdj.1, my.vdj.2, my.vdj.3) +my.vdj.data <- rbind(WT, KO) # see head of the file head(my.vdj.data) From c40a56df1d41b1cb56e833da7c137859d2ad5028 Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Tue, 6 Feb 2024 15:20:01 -0500 Subject: [PATCH 70/74] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6d6c371..82a702c 100644 --- a/README.md +++ b/README.md @@ -2594,7 +2594,7 @@ clono.plot(my.obj, plot.data.type = "knetl", ordered.clonotypes <- as.character(as.matrix((clonotype.frequency)[1])) # let's plot top 19 clonotypes with highest frequency: -clonolist <- head(ordered.clonotypes, 19) +clonolist <- (ordered.clonotypes)[1:19] clonolist # [1] "S2_clonotype1" "S1_clonotype1" "S3_clonotype1" "S4_clonotype1" # [5] "S5_clonotype1" "S2_clonotype2" "S3_clonotype2" "S1_clonotype2" From 12fbeecb4632143d710f26bc3a237f28c19117bb Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Thu, 28 Mar 2024 12:02:30 -0400 Subject: [PATCH 71/74] Update README.md --- README.md | 120 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 62 insertions(+), 58 deletions(-) diff --git a/README.md b/README.md index 82a702c..a90263d 100644 --- a/README.md +++ b/README.md @@ -1774,22 +1774,36 @@ plot_pseudotime_heatmap(my.monoc.obj[MyGenes,], ```r # Read an example file -my.hto <- read.table(file = system.file('extdata', 'dense_umis.tsv', package = 'iCellR'), as.is = TRUE) - -# see the head of the file for the first few columns -head(my.hto)[1:3] -# TGACAACAGGGCTCTC AAGGAGCGTCATTAGC AGTGAGGAGACTGTAA -#Hashtag1-GTCAACTCTTTAGCG 3 7 7 -#Hashtag2-TGATGGCCTATTGGG 18 24 1761 -#Hashtag3-TTCCGCCTCTCTTTG 7 8 5 -#Hashtag4-AGTAAGTTCAGCGTA 0 0 0 -#Hashtag5-AAGTATCGTTTCGCA 890 2 11 -#Hashtag7-TGTCTTTCCTGCCAG 5 3 3 +# my.hto <- read.table(file = system.file('extdata', 'dense_umis.tsv', package = 'iCellR'), as.is = TRUE) +# or +my.data <- load10x("filtered_feature_bc_matrix",gene.name = 2) + +# tail(row.names(my.data),5) +# [1] "TotalSeq.C0254_anti.human_Hashtag_4_Antibody" +# [2] "TotalSeq.C0255_anti.human_Hashtag_5_Antibody" +# [3] "TotalSeq.C0256_anti.human_Hashtag_6_Antibody" +# [4] "TotalSeq.C0257_anti.human_Hashtag_7_Antibody" +# [5] "TotalSeq.C0258_anti.human_Hashtag_8_Antibody" + +# your HTOs +HTOs <- grep("^TotalSeq",row.names(my.data),value=T) + +# your genes +RNAs <- subset(row.names(my.data), !(row.names(my.data) %in% HTOs)) + +MyHTOs <- subset(my.data, row.names(my.data) %in% HTOs) +MyRNAs <- subset(my.data, row.names(my.data) %in% RNAs) + +dim(MyHTOs) +dim(MyRNAs) + # run annotation -htos <- hto.anno(hto.data = my.hto, cov.thr = 10, assignment.thr = 80) +data <- hto.anno(hto.data = MyHTOs, cov.thr = 3, assignment.thr = 80) +data <- (cbind(ID = rownames(data),data)) +write.table((data),"HTOs_annotated_HSThigh.tsv",sep="\t", row.names =F) -head(htos) +head(data) # Hashtag1-GTCAACTCTTTAGCG Hashtag2-TGATGGCCTATTGGG #TGACAACAGGGCTCTC 3 18 #AAGGAGCGTCATTAGC 7 24 @@ -1828,20 +1842,21 @@ head(htos) # plot -A = ggplot(htos, aes(assignment.annotation,percent.match)) + +A = ggplot(data, aes(assignment.annotation,percent.match)) + geom_jitter(alpha = 0.25, color = "blue") + geom_boxplot(alpha = 0.5) + theme_bw() + theme(axis.text.x=element_text(angle=90)) -B = ggplot(htos, aes(low.cov,percent.match)) + +B = ggplot(data, aes(low.cov,percent.match)) + geom_jitter(alpha = 0.25, color = "blue") + geom_boxplot(alpha = 0.5) + theme_bw() + theme(axis.text.x=element_text(angle=90)) library(gridExtra) -png('HTOs.png', width = 8, height = 8, units = 'in', res = 300) +Name="HTO_stats.png" +png(Name, width = 8, height = 8, units = 'in', res = 300) grid.arrange(A,B,ncol=2) dev.off() ``` @@ -1853,51 +1868,40 @@ dev.off() - Filtering HTOs and merging the samples ```r - # let's say you decided filtering based on 80% - dim(htos) - # [1] 1500 12 - htos <- subset(htos,htos$percent.match > 80) - dim(htos) - # [1] 1073 12 +dim(data) +data = subset(data, percent.match > 80) +#data = subset(data, low.cov == "FALSE") +dim(data) # Take the cell IDs from Hashtag1 - sample1 <- row.names(subset(htos,htos$assignment.annotation == "Hashtag1-GTCAACTCTTTAGCG")) - - head(sample1) -# [1] "ATCCACCCATGTTCCC" "AAACGGGCAGGACCCT" "TTCTACATCCTCATTA" "GGTATTGTCCTATGTT" -# [5] "GTCGTAATCTTACCTA" "ACAGCCGGTTGGGACA" - -length(sample1) -# [1] 213 -# in this case you have 213 cells in sample 1 (Hashtag1) - -# Take the cell IDs from Hashtag2 -sample2 <- row.names(subset(htos,htos$assignment.annotation == "Hashtag2-TGATGGCCTATTGGG")) - -# now read your RNA data -# example: -RNA.data <- load10x("YOUR/data/filtered_gene_bc_matrices/hg19/") - -head(RNA.data)[1:2] -# AAACATAAAACCAG CCCCATTGAGCTAA -#A1BG.AS1 0 0 -#BCLA 0 0 -#A2M 0 0 -#GATA1 0 0 - -# NOTE: the RNA data has the cell IDs in the same format as HTOs -# "AAACATAAAACCAG" "CCCCATTGAGCTAA" ... -# Not "AAACATAAAACCAG.1" "CCCCATTGAGCTAA.1" ... - -# demultiplex RNA data -# Take RNA-Seq data with the cell IDs from Hashtag1 -sample1.rna <- RNA.data[ , which(names(RNA.data) %in% sample1)] - -# Take RNA-Seq data with the cell IDs from Hashtag2 -sample2.rna <- RNA.data[ , which(names(RNA.data) %in% sample2)] - -# aggregate (merge the 2 or more samples after demultiplexing) + bestHTOs <- as.character(unique(data$assignment.annotation)) + +# create new files + +library(Matrix) +for(i in bestHTOs){ + sample <- row.names(subset(data,data$assignment.annotation == i)) + message(paste(" getting sample",i,"...")) + sample <- MyRNAs[ , which(names(MyRNAs) %in% sample)] + message(paste(" number of cells",dim(sample)[2])) + Name=paste("RNAs",i,dim(sample)[2],sep="_") + message(paste(" writing sample",i,"...")) +dir.create(Name) +COLs <- colnames(sample) +ROWs <- row.names(sample) +colnames(sample) <- NULL +row.names(sample) <- NULL +sparse.gbm <- Matrix(as.matrix.data.frame(sample), sparse = T ) +Name1=paste(Name,"matrix.mtx",sep="/") +writeMM(obj = sparse.gbm, file=Name1) +Name1=paste(Name,"barcodes.tsv.gz",sep="/") +write.table((COLs),gzfile(Name1), row.names =FALSE, quote = FALSE, col.names = FALSE) +MY.ROWs <- cbind(ROWs,ROWs) +Name1=paste(Name,"genes.tsv.gz",sep="/") +write.table((MY.ROWs),gzfile(Name1),sep="\t", row.names =F, quote = FALSE, col.names = FALSE) +} +# example my.data <- data.aggregation(samples = c("sample1.rna","sample2.rna"), condition.names = c("S1","S2")) From e476af62b272ceb11ad67743857f39d2d54f11ca Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Thu, 28 Mar 2024 12:40:49 -0400 Subject: [PATCH 72/74] Update README.md --- README.md | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index a90263d..d103482 100644 --- a/README.md +++ b/README.md @@ -1778,6 +1778,8 @@ plot_pseudotime_heatmap(my.monoc.obj[MyGenes,], # or my.data <- load10x("filtered_feature_bc_matrix",gene.name = 2) +# Your HTOs are usually in the end of all the gene names + # tail(row.names(my.data),5) # [1] "TotalSeq.C0254_anti.human_Hashtag_4_Antibody" # [2] "TotalSeq.C0255_anti.human_Hashtag_5_Antibody" @@ -1785,10 +1787,11 @@ my.data <- load10x("filtered_feature_bc_matrix",gene.name = 2) # [4] "TotalSeq.C0257_anti.human_Hashtag_7_Antibody" # [5] "TotalSeq.C0258_anti.human_Hashtag_8_Antibody" -# your HTOs +# your HTOs are usually in the matrix and have names that are different than gene names +# Your HTO names HTOs <- grep("^TotalSeq",row.names(my.data),value=T) -# your genes +# your gene names RNAs <- subset(row.names(my.data), !(row.names(my.data) %in% HTOs)) MyHTOs <- subset(my.data, row.names(my.data) %in% HTOs) @@ -1868,15 +1871,21 @@ dev.off() - Filtering HTOs and merging the samples ```r +# let's see how many cells are there dim(data) + +# let's say you want to have the cells that are above 80 % likelihood of belonging to a HTO data = subset(data, percent.match > 80) -#data = subset(data, low.cov == "FALSE") + +# let's see how many cells are left dim(data) - # Take the cell IDs from Hashtag1 + # Take the HTO IDs that passed filtering bestHTOs <- as.character(unique(data$assignment.annotation)) -# create new files +#################### +# create new files (matrices) for each HTO (with number of cells added to the folder names) +#################### library(Matrix) for(i in bestHTOs){ @@ -1901,9 +1910,11 @@ Name1=paste(Name,"genes.tsv.gz",sep="/") write.table((MY.ROWs),gzfile(Name1),sep="\t", row.names =F, quote = FALSE, col.names = FALSE) } -# example -my.data <- data.aggregation(samples = c("sample1.rna","sample2.rna"), - condition.names = c("S1","S2")) +#################### +#################### +# example data aggregation for 2 samples/HTOs +my.data <- data.aggregation(samples = c("HTO1","HTO2"), + condition.names = c("HTO1","HTO2")) # make iCellR object my.obj <- make.obj(my.data) From 6577b50e77c071bd9583b3a7bdea13384f13baa3 Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Thu, 28 Mar 2024 12:42:10 -0400 Subject: [PATCH 73/74] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d103482..ebe2ab5 100644 --- a/README.md +++ b/README.md @@ -1874,8 +1874,8 @@ dev.off() # let's see how many cells are there dim(data) -# let's say you want to have the cells that are above 80 % likelihood of belonging to a HTO -data = subset(data, percent.match > 80) +# let's say you want to have the cells that are above 80 % likelihood of belonging to an HTO +data <- subset(data, percent.match > 80) # let's see how many cells are left dim(data) From 3134c866bce58f16f10100db380f6f3e9c1c7404 Mon Sep 17 00:00:00 2001 From: Alireza Khodadadi-Jamayran Date: Wed, 10 Jul 2024 13:10:27 -0400 Subject: [PATCH 74/74] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ebe2ab5..cb98102 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ If you are using FlowJo or SeqGeq, they have made plugins for iCellR and other s For citing iCellR use this [PMID: 34353854](https://cancerdiscovery.aacrjournals.org/content/early/2021/07/28/2159-8290.CD-21-0369) -iCellR publications: [PMID: 35660135](https://pubmed.ncbi.nlm.nih.gov/35660135/) (scRNA-seq/KNetL) [PMID: 35180378](https://pubmed.ncbi.nlm.nih.gov/35180378/) (CITE-seq), [PMID: 34911733](https://pubmed.ncbi.nlm.nih.gov/34911733/) (i.score and cell ranking), [PMID: 34963055](https://www.cell.com/cell/fulltext/S0092-8674(21)01427-6?_returnURL=https%3A%2F%2Flinkinghub.elsevier.com%2Fretrieve%2Fpii%2FS0092867421014276%3Fshowall%3Dtrue) (scRNA-seq), [PMID 31744829](https://www.ncbi.nlm.nih.gov/pubmed/31744829) (scRNA-seq), [PMID: 31934613](https://www.ncbi.nlm.nih.gov/pubmed/31934613) (bulk RNA-seq from TCGA), [PMID: 32550269](https://pubmed.ncbi.nlm.nih.gov/32550269/) (scVDJ-seq), [PMID: 34135081](https://jasn.asnjournals.org/content/32/8/1987), [PMID: 33593073](https://www.ahajournals.org/doi/10.1161/CIRCRESAHA.120.317914), [PMID: 34634466](https://pubmed.ncbi.nlm.nih.gov/34634466/), [PMID: 35302059](https://pubmed.ncbi.nlm.nih.gov/35302059/), [PMID: 34353854](https://cancerdiscovery.aacrjournals.org/content/early/2021/07/28/2159-8290.CD-21-0369) +iCellR publications: [PMID: 35660135](https://pubmed.ncbi.nlm.nih.gov/35660135/) (scRNA-seq/KNetL) [PMID: 35180378](https://pubmed.ncbi.nlm.nih.gov/35180378/) (CITE-seq/KNetL), [PMID: 34911733](https://pubmed.ncbi.nlm.nih.gov/34911733/) (i.score and cell ranking), [PMID: 34963055](https://www.cell.com/cell/fulltext/S0092-8674(21)01427-6?_returnURL=https%3A%2F%2Flinkinghub.elsevier.com%2Fretrieve%2Fpii%2FS0092867421014276%3Fshowall%3Dtrue) (scRNA-seq), [PMID 31744829](https://www.ncbi.nlm.nih.gov/pubmed/31744829) (scRNA-seq), [PMID: 31934613](https://www.ncbi.nlm.nih.gov/pubmed/31934613) (bulk RNA-seq from TCGA), [PMID: 32550269](https://pubmed.ncbi.nlm.nih.gov/32550269/) (scVDJ-seq), [PMID: 34135081](https://jasn.asnjournals.org/content/32/8/1987), [PMID: 33593073](https://www.ahajournals.org/doi/10.1161/CIRCRESAHA.120.317914), [PMID: 34634466](https://pubmed.ncbi.nlm.nih.gov/34634466/), [PMID: 35302059](https://pubmed.ncbi.nlm.nih.gov/35302059/), [PMID: 34353854](https://cancerdiscovery.aacrjournals.org/content/early/2021/07/28/2159-8290.CD-21-0369) ### Single (i) Cell R package (iCellR)