-
Notifications
You must be signed in to change notification settings - Fork 1
/
resultsTables-methods.R
132 lines (122 loc) · 3.9 KB
/
resultsTables-methods.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#' @name resultsTables
#' @inherit AcidGenerics::resultsTables
#' @note Updated 2022-05-24.
#'
#' @inheritParams params
#' @inheritParams results
#' @inheritParams AcidRoxygen::params
#' @param ... Additional arguments.
#'
#' @details
#' Generate tables summarizing the differential expression, with subsets for
#' differentially expressed genes (DEGs). DEG tables (i.e. everything except the
#' `all` table), are arranged by adjusted *P* value.
#'
#' @note It is generally recommended to not apply post hoc log fold change
#' cutoffs. If a specific effect size is desired, instead run
#' `DESeq2::results()` using the `lfcThreshold` parameter. Refer to the DESeq2
#' documentation and vignette for details.
#'
#' @section Tables:
#'
#' - `all`: All genes, including genes without an adjusted *P* value. This table
#' is unmodified, and the rows have not been re-arranged or subset. It is
#' suitable for gene set enrichment analysis (GSEA).
#' - `up`: Upregulated genes.
#' - `down`: Downregulated genes.
#' - `both`: Bidirectional DEGs (up- and down-regulated). This table can be
#' used for overrepresentation testing but should NOT be used for GSEA.
#'
#' @return `DFrameList`.
#' Named list containing subsets of `DESeqResults`.
#'
#' @examples
#' data(deseq)
#'
#' ## DESeqAnalysis ====
#' x <- resultsTables(deseq, i = 1L)
#' print(x)
NULL
## Updated 2023-12-18.
`resultsTables,DESeqAnalysis` <- # nolint
function(object,
i,
alphaThreshold = NULL,
baseMeanThreshold = NULL,
lfcThreshold = NULL,
extra = TRUE) {
assert(validObject(object))
resultsTables(
object = results(object = object, i = i, extra = extra),
alphaThreshold = ifelse(
test = is.null(alphaThreshold),
yes = alphaThreshold(object),
no = alphaThreshold
),
baseMeanThreshold = ifelse(
test = is.null(baseMeanThreshold),
yes = baseMeanThreshold(object),
no = baseMeanThreshold
),
lfcThreshold = ifelse(
test = is.null(lfcThreshold),
yes = lfcThreshold(object),
no = lfcThreshold
)
)
}
## Updated 2022-05-24.
`resultsTables,DESeqResults` <- # nolint
function(object,
alphaThreshold = NULL,
baseMeanThreshold = NULL,
lfcThreshold = NULL) {
both <- deg(
object = object,
direction = "both",
alphaThreshold = alphaThreshold,
baseMeanThreshold = baseMeanThreshold,
lfcThreshold = lfcThreshold
)
if (!hasLength(both)) {
out <- list("all" = object)
} else {
up <- deg(
object = object,
direction = "up",
alphaThreshold = alphaThreshold,
baseMeanThreshold = baseMeanThreshold,
lfcThreshold = lfcThreshold
)
down <- deg(
object = object,
direction = "down",
alphaThreshold = alphaThreshold,
baseMeanThreshold = baseMeanThreshold,
lfcThreshold = lfcThreshold
)
out <- list(
"all" = object,
"up" = object[up, , drop = FALSE],
"down" = object[down, , drop = FALSE],
"both" = object[both, , drop = FALSE]
)
out <- Filter(f = hasRows, x = out)
}
out <- DataFrameList(out)
out
}
#' @rdname resultsTables
#' @export
setMethod(
f = "resultsTables",
signature = signature(object = "DESeqAnalysis"),
definition = `resultsTables,DESeqAnalysis`
)
#' @rdname resultsTables
#' @export
setMethod(
f = "resultsTables",
signature = signature(object = "DESeqResults"),
definition = `resultsTables,DESeqResults`
)