@@ -31,6 +31,34 @@ get_usage <- function(u) {
31
31
condition_names = condition_names ))
32
32
}
33
33
34
+ check_paired <- function (u ,
35
+ has_balanced_replicates ,
36
+ has_replicates ,
37
+ has_condition ) {
38
+ if (has_condition == FALSE ) {
39
+ return (FALSE )
40
+ }
41
+ if (has_balanced_replicates == FALSE ) {
42
+ return (FALSE )
43
+ }
44
+
45
+ if (has_replicates ) {
46
+ q <- u [duplicated(u [,c(" individual_id" ," condition" ," replicate" )])== FALSE ,]
47
+ q $ f <- 1
48
+ q <- aggregate(f ~ individual_id + condition + replicate , data = q ,
49
+ FUN = sum , simplify = FALSE , drop = FALSE )
50
+ q $ f [is.null(q $ f )| is.na(q $ f )] <- 0
51
+ return (ifelse(test = any(q $ f != 1 ), yes = FALSE , no = TRUE ))
52
+ }
53
+ else {
54
+ q <- u [duplicated(u [,c(" individual_id" , " condition" )])== FALSE ,]
55
+ q $ f <- 1
56
+ q <- aggregate(f ~ individual_id + condition , data = q , FUN = sum ,
57
+ simplify = FALSE , drop = FALSE )
58
+ q $ f [is.null(q $ f )| is.na(q $ f )] <- 0
59
+ return (ifelse(test = any(q $ f != 1 ), yes = FALSE , no = TRUE ))
60
+ }
61
+ }
34
62
35
63
u $ individual_org_name <- u $ individual_id
36
64
if (" replicate" %in% colnames(u )) {
@@ -124,6 +152,14 @@ get_usage <- function(u) {
124
152
individual_names = individual_names ,
125
153
m = m )
126
154
155
+ has_conditions <- max(cos $ condition_ids )> 1
156
+
157
+ has_paired_data <- check_paired(
158
+ u = u ,
159
+ has_balanced_replicates = has_balanced_replicates ,
160
+ has_replicates = has_replicates ,
161
+ has_condition = has_condition )
162
+
127
163
return (list (Y = Y ,
128
164
N = as.numeric(N ),
129
165
N_sample = ncol(Y ),
@@ -145,23 +181,26 @@ get_usage <- function(u) {
145
181
N_replicate = max(replicate_ids ),
146
182
proc_ud = u ,
147
183
has_replicates = has_replicates ,
148
- has_conditions = max(cos $ condition_ids )> 1 ,
149
- has_balanced_replicates = has_balanced_replicates ))
184
+ has_conditions = has_conditions ,
185
+ has_balanced_replicates = has_balanced_replicates ,
186
+ has_paired_data = has_paired_data ))
150
187
}
151
188
152
-
153
-
154
189
# Description:
155
190
# get the appropriate model
156
- get_model <- function (has_replicates ,
157
- has_conditions ,
158
- has_balanced_replicates ,
191
+ get_model <- function (has_replicates ,
192
+ has_conditions ,
193
+ has_balanced_replicates ,
194
+ has_paired_data ,
159
195
paired ) {
160
196
161
197
model_type <- ifelse(test = has_conditions , yes = " DGU" , no = " GU" )
162
198
163
199
if (paired == TRUE & has_balanced_replicates == FALSE ) {
164
- stop(" For paired analysis with replicates, you need balanced replicates!" )
200
+ stop(" For paired analysis with replicates, you need balanced replicates" )
201
+ }
202
+ if (paired == TRUE & has_paired_data == FALSE ) {
203
+ stop(" paired data selected, but data is not paired" )
165
204
}
166
205
167
206
if (model_type == " GU" ) {
@@ -229,6 +268,8 @@ get_model <- function(has_replicates,
229
268
pars = pars ,
230
269
has_replicates = has_replicates ,
231
270
has_conditions = has_conditions ,
271
+ has_balanced_replicates = has_balanced_replicates ,
272
+ has_paired_data = has_paired_data ,
232
273
paired = paired ))
233
274
}
234
275
0 commit comments