14
14
# ' @param cellIndex A vector that can subset the input SCE object by columns
15
15
# ' (cells). Alternatively, it can be a vector identifying cells in another
16
16
# ' cell list indicated by \code{featureIndexBy}. Default \code{NULL}.
17
- # ' @param scale Whether to perform z-score scaling on each row. Default
18
- # ' \code{TRUE}.
17
+ # ' @param scale Whether to perform z-score or min-max scaling on each row.Choose from \code{"zscore"}, \code{"min-max"} or default
18
+ # ' \code{TRUE} or \code{FALSE}
19
19
# ' @param trim A 2-element numeric vector. Values outside of this range will be
20
20
# ' trimmed to their nearst bound. Default \code{c(-2, 2)}
21
21
# ' @param featureIndexBy A single character specifying a column name of
103
103
# ' @importFrom stringr str_replace_all str_c
104
104
# ' @importFrom stats prcomp quantile
105
105
# ' @importFrom dplyr select arrange group_by count ungroup mutate one_of desc
106
- # ' @importFrom tidyr spread
106
+ # ' @importFrom tidyr spread unite column_to_rownames remove_rownames
107
107
# ' @importFrom grid gpar
108
+ # ' @importFrom ComplexHeatmap anno_barplot
109
+ # ' @importFrom rlang .data
110
+ # '
108
111
plotSCEHeatmap <- function (inSCE , useAssay = ' logcounts' , useReducedDim = NULL ,
109
112
doLog = FALSE , featureIndex = NULL , cellIndex = NULL ,
110
113
scale = TRUE , trim = c(- 2 ,2 ),
@@ -238,14 +241,26 @@ plotSCEHeatmap <- function(inSCE, useAssay = 'logcounts', useReducedDim = NULL,
238
241
}
239
242
featureIndex <- which(featureIndex )
240
243
}
241
- colnames(SCE ) <- colLabelName
242
- rownames(SCE ) <- rowLabelName
244
+ if (is.null(colLabelName )){
245
+ colnames(SCE ) <- NULL
246
+ }
247
+ else {
248
+ colnames(SCE ) <- colLabelName
249
+ }
250
+
251
+ if (is.null(rowLabelName )){
252
+ rownames(SCE ) <- NULL
253
+ }
254
+ else {
255
+ rownames(SCE ) <- rowLabelName
256
+ }
257
+
243
258
SCE <- SCE [featureIndex , cellIndex ]
244
259
# ## Scaling should be done before aggregating
245
260
if (isTRUE(doLog )) assay(SCE ) <- log1p(assay(SCE ))
246
261
if (isTRUE(scale )) scale <- " zscore"
247
262
if ((scale == " zscore" )) {
248
- assay(SCE ) <- as.matrix(scale(assay(SCE )))
263
+ assay(SCE ) <- as.matrix(base :: scale(assay(SCE )))
249
264
} else if (scale == " min_max" ) {
250
265
assay(SCE ) <- as.matrix(.minmax(assay(SCE )))
251
266
}
@@ -263,7 +278,14 @@ plotSCEHeatmap <- function(inSCE, useAssay = 'logcounts', useReducedDim = NULL,
263
278
# TODO: `aggregateAcrossCells` produce duplicated variables in colData
264
279
# and unwanted "ncell" variable even if I set `store.number = NULL`.
265
280
# colData(SCE) <- colData(SCE)[,c(aggregateCol),drop=FALSE] ##change
266
- temp_df <- as.data.frame(colData(SCE )[,c(aggregateCol ),drop = FALSE ]) %> % unite(" new_colnames" ,1 : ncol(. ),sep = " _" ) %> % remove_rownames() %> % column_to_rownames(" new_colnames" )
281
+
282
+ temp_df <- as.data.frame(colData(SCE )[,c(aggregateCol ),drop = FALSE ]) %> %
283
+ unite(" new_colnames" ,1 : ncol(. ),sep = " _" ,remove = FALSE ) %> %
284
+ remove_rownames() %> %
285
+ mutate(aggregated_column = new_colnames ) %> %
286
+ dplyr :: select(new_colnames , aggregated_column ) %> %
287
+ column_to_rownames(" new_colnames" )
288
+
267
289
colData(SCE )<- DataFrame(temp_df )
268
290
rowData(SCE ) <- origRowData
269
291
}
@@ -278,14 +300,14 @@ plotSCEHeatmap <- function(inSCE, useAssay = 'logcounts', useReducedDim = NULL,
278
300
colData(SCE ) <- origColData
279
301
}
280
302
# STAGE 4: Other minor preparation for plotting ####
281
-
303
+
282
304
# Create a function that sorts the matrix by PC1
283
305
.orderMatrix <- function (mat ){
284
306
# Adding extra character to rownames because presence of some char gets a "." if I don't
285
307
mat2 <- data.frame (t(mat ))
286
308
rownames(mat2 )<- stringr :: str_c(" K_" ,rownames(mat2 ))
287
309
pca_mat <- stats :: prcomp(mat2 ,center = TRUE , scale. = FALSE )
288
- kl <- dplyr :: arrange(data.frame (pca_mat $ x )[" PC1" ],desc(PC1 ))
310
+ kl <- dplyr :: arrange(data.frame (pca_mat $ x )[" PC1" ],desc(data.frame ( pca_mat $ x )[ " PC1" ] ))
289
311
mat <- data.frame (t(mat2 )) %> % dplyr :: select(rownames(kl ))
290
312
colnames(mat )<- stringr :: str_replace_all(colnames(mat )," K_" ," " )
291
313
return (as.matrix(mat ))
@@ -298,10 +320,15 @@ plotSCEHeatmap <- function(inSCE, useAssay = 'logcounts', useReducedDim = NULL,
298
320
mat <- .orderMatrix(mat )
299
321
300
322
} else {
301
- mat <- assay(SCE )
323
+
324
+ if (class(assay(SCE ))[1 ] == " dgCMatrix" ){
325
+ mat <- as.matrix(assay(SCE ))
326
+ }
327
+ else {
328
+ mat <- assay(SCE )
329
+ }
302
330
}
303
331
304
-
305
332
306
333
if (! is.null(trim ) & scale == " zscore" ) {
307
334
assay(SCE ) <- trimCounts(assay(SCE ), trim )
@@ -344,14 +371,16 @@ plotSCEHeatmap <- function(inSCE, useAssay = 'logcounts', useReducedDim = NULL,
344
371
if (breaks [1 ] != min(trim ) || breaks [length(breaks )] != max(trim ))
345
372
stop(' Breaks of `colorScheme` do not match with `trim`.' )
346
373
}
374
+
375
+
347
376
# ## Generate HeatmapAnnotation object
348
377
ca <- NULL
349
378
cellAnnotationColor <- .heatmapAnnColor(SCE , slot = " colData" ,
350
379
custom = cellAnnotationColor ,
351
380
palette = palette )
352
381
if (dim(cellAnnotations )[2 ] > 0 )
353
382
if (is.null(addCellSummary )){
354
- ca <- ComplexHeatmap :: HeatmapAnnotation(df = colData(SCE ),
383
+ ca <- ComplexHeatmap :: HeatmapAnnotation(df = as.data.frame( colData(SCE ) ),
355
384
col = cellAnnotationColor )
356
385
}
357
386
else if (! addCellSummary %in% colnames(oldColData )){
@@ -415,6 +444,7 @@ plotSCEHeatmap <- function(inSCE, useAssay = 'logcounts', useReducedDim = NULL,
415
444
show_row_names = rowLabel ,
416
445
row_names_gp = grid :: gpar(fontsize = rowLabelSize ),
417
446
show_row_dend = rowDend ,
447
+ show_column_dend = colDend ,
418
448
row_dend_reorder = TRUE ,
419
449
cluster_columns = FALSE ,
420
450
show_column_names = colLabel ,
0 commit comments