Mercurial > repos > iuc > charts
comparison heatmap.r @ 1:344ac3ca7557 draft default tip
"planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/charts/ commit 4494db13b69987fbc97d47177d2a5956e46e927b"
author | iuc |
---|---|
date | Wed, 17 Nov 2021 09:06:59 +0000 |
parents | a87a3773d8ed |
children |
comparison
equal
deleted
inserted
replaced
0:a87a3773d8ed | 1:344ac3ca7557 |
---|---|
1 # load sparse matrix package | 1 # load sparse matrix package |
2 suppressPackageStartupMessages(library('Matrix')) | 2 suppressPackageStartupMessages(library("Matrix")) |
3 | 3 |
4 # access a numeric column | 4 # access a numeric column |
5 get_numeric <- function(table, column_key) { | 5 get_numeric <- function(table, column_key) { |
6 column <- as.numeric(column_key) | 6 column <- as.numeric(column_key) |
7 column_data <- suppressWarnings(as.numeric(as.character(table[column][[1]]))) | 7 column_data <- suppressWarnings(as.numeric(as.character(table[column][[1]]))) |
8 return (c(column_data)) | 8 return(c(column_data)) |
9 } | 9 } |
10 | 10 |
11 # access a label column | 11 # access a label column |
12 get_label <- function(table, column_key) { | 12 get_label <- function(table, column_key) { |
13 column <- as.numeric(column_key) | 13 column <- as.numeric(column_key) |
14 column_data <- as.character(table[column][[1]]) | 14 column_data <- as.character(table[column][[1]]) |
15 return (c(column_data)) | 15 return(c(column_data)) |
16 } | 16 } |
17 | 17 |
18 # inflate three columns into matrix | 18 # inflate three columns into matrix |
19 matrify <- function (data) { | 19 matrify <- function(data) { |
20 if (ncol(data) != 3) | 20 if (ncol(data) != 3) |
21 stop('Data frame must have three column format') | 21 stop("Data frame must have three column format") |
22 plt <- data[, 1] | 22 plt <- data[, 1] |
23 spc <- data[, 2] | 23 spc <- data[, 2] |
24 abu <- data[, 3] | 24 abu <- data[, 3] |
25 plt.codes <- levels(factor(plt)) | 25 plt_codes <- levels(factor(plt)) |
26 spc.codes <- levels(factor(spc)) | 26 spc_codes <- levels(factor(spc)) |
27 taxa <- Matrix(0, nrow=length(plt.codes), ncol=length(spc.codes), sparse=TRUE) | 27 taxa <- Matrix(0, nrow = length(plt_codes), ncol = length(spc_codes), sparse = TRUE) |
28 row <- match(plt, plt.codes) | 28 row <- match(plt, plt_codes) |
29 col <- match(spc, spc.codes) | 29 col <- match(spc, spc_codes) |
30 for (i in 1:length(abu)) { | 30 for (i in seq_len(length(abu))) { |
31 taxa[row[i], col[i]] <- abu[i] | 31 taxa[row[i], col[i]] <- abu[i] |
32 } | 32 } |
33 colnames(taxa) <- spc.codes | 33 colnames(taxa) <- spc_codes |
34 rownames(taxa) <- plt.codes | 34 rownames(taxa) <- plt_codes |
35 taxa | 35 taxa |
36 } | 36 } |
37 | 37 |
38 # flatten data.frame into three column format | 38 # flatten data.frame into three column format |
39 flatten <- function(my_matrix) { | 39 flatten <- function(my_matrix) { |
40 summ <-summary(my_matrix) | 40 summ <- summary(my_matrix) |
41 summ <- data.frame(i=rownames(my_matrix)[summ$i], j=colnames(my_matrix)[summ$j], x=summ$x) | 41 summ <- data.frame(i = rownames(my_matrix)[summ$i], j = colnames(my_matrix)[summ$j], x = summ$x) |
42 summ | 42 summ |
43 } | 43 } |
44 | 44 |
45 # wrapper | 45 # wrapper |
46 wrapper <- function(table, columns, options) { | 46 wrapper <- function(table, columns, options) { |
47 | 47 |
48 # initialize output list | 48 # initialize output list |
49 l <- list() | 49 l <- list() |
50 | 50 |
51 # get number of columns | 51 # get number of columns |
52 n = length(columns) | 52 n <- length(columns) |
53 | 53 |
54 # consistency check | 54 # consistency check |
55 if (n %% 3 != 0) { | 55 if (n %% 3 != 0) { |
56 print ('heatmap::wrapper() - Data not consistent (n mod 3 != 0)') | 56 print("heatmap::wrapper() - Data not consistent (n mod 3 != 0)") |
57 return (l) | 57 return(l) |
58 } | 58 } |
59 | 59 |
60 # create index sequence | 60 # create index sequence |
61 index = seq(1, n, by=3) | 61 index <- seq(1, n, by = 3) |
62 | 62 |
63 # get keys | 63 # get keys |
64 keys = names(columns) | 64 keys <- names(columns) |
65 | 65 |
66 # loop through blocks | 66 # loop through blocks |
67 for (i in index) { | 67 for (i in index) { |
68 # create columns | 68 # create columns |
69 ci <- get_label(table, columns[keys[i]]) | 69 ci <- get_label(table, columns[keys[i]]) |
70 cj <- get_label(table, columns[keys[i+1]]) | 70 cj <- get_label(table, columns[keys[i + 1]]) |
71 cx <- get_numeric(table, columns[keys[i+2]]) | 71 cx <- get_numeric(table, columns[keys[i + 2]]) |
72 | 72 |
73 # create a frame from columns | 73 # create a frame from columns |
74 my_frame <- data.frame(ci=ci, cj=cj, cx=cx) | 74 my_frame <- data.frame(ci = ci, cj = cj, cx = cx) |
75 | 75 |
76 # create matrix out of the frame | 76 # create matrix out of the frame |
77 my_matrix <- matrify(my_frame) | 77 my_matrix <- matrify(my_frame) |
78 | 78 |
79 # create/cluster matrix | 79 # create/cluster matrix |
80 row_order <- hclust(dist(my_matrix))$order | 80 row_order <- hclust(dist(my_matrix))$order |
81 col_order <- hclust(dist(t(my_matrix)))$order | 81 col_order <- hclust(dist(t(my_matrix)))$order |
82 | 82 |
83 # reorder matrix | 83 # reorder matrix |
84 my_matrix <- my_matrix[row_order, col_order] | 84 my_matrix <- my_matrix[row_order, col_order] |
85 | 85 |
86 # transform back to three columns | 86 # transform back to three columns |
87 my_flatmatrix = flatten(my_matrix) | 87 my_flatmatrix <- flatten(my_matrix) |
88 | 88 |
89 # append to result list | 89 # append to result list |
90 l <- append(l, list(my_flatmatrix$i)) | 90 l <- append(l, list(my_flatmatrix$i)) |
91 l <- append(l, list(my_flatmatrix$j)) | 91 l <- append(l, list(my_flatmatrix$j)) |
92 l <- append(l, list(my_flatmatrix$x)) | 92 l <- append(l, list(my_flatmatrix$x)) |
93 } | 93 } |
94 | 94 |
95 # return | 95 # return |
96 return (l) | 96 return(l) |
97 } | 97 } |