@@ -187,6 +187,27 @@ ModelArray.lm <- function(formula, data, phenotypes, scalar, element.subset = NU
187187 var.model <- var.model.full
188188 }
189189
190+ # check on validity of list of vars:
191+ var.terms <- var.terms [! duplicated(var.terms )]
192+ var.model <- var.model [! duplicated(var.model )]
193+
194+ # check if all var.* are empty:
195+ if (length(var.terms ) == 0 && length(var.model ) == 0 ) {
196+ stop(" All var.* arguments [var.terms, var.model] are empty!" )
197+ }
198+
199+ # check if every var is valid:
200+ for (var in var.terms ) {
201+ if (! (var %in% var.terms.full )) {
202+ stop(paste0(var , " is not valid for var.terms!" ))
203+ }
204+ }
205+ for (var in var.model ) {
206+ if (! (var %in% var.model.full )) {
207+ stop(paste0(var , " is not valid for var.model!" ))
208+ }
209+ }
210+
190211 # P-value correction checks ----
191212 check_validity_correctPValue(
192213 correct.p.value.terms , " correct.p.value.terms" ,
@@ -417,9 +438,58 @@ ModelArray.gam <- function(formula, data, phenotypes, scalar,
417438 var.model <- var.model.full
418439 }
419440
441+ var.smoothTerms <- var.smoothTerms [! duplicated(var.smoothTerms )]
442+ var.parametricTerms <- var.parametricTerms [! duplicated(var.parametricTerms )]
443+ var.model <- var.model [! duplicated(var.model )]
444+
445+ if (length(var.smoothTerms ) == 0 && length(var.parametricTerms ) == 0 && length(var.model ) == 0 ) {
446+ stop(" All var.* arguments [var.smoothTerms, var.parametricTerms, var.model] are empty!" )
447+ }
448+
449+ for (var in var.smoothTerms ) {
450+ if (! (var %in% var.smoothTerms.full )) {
451+ stop(paste0(var , " is not valid for var.smoothTerms!" ))
452+ }
453+ }
454+ for (var in var.parametricTerms ) {
455+ if (! (var %in% var.parametricTerms.full )) {
456+ stop(paste0(var , " is not valid for var.parametricTerms!" ))
457+ }
458+ }
459+ for (var in var.model ) {
460+ if (! (var %in% var.model.full )) {
461+ stop(paste0(var , " is not valid!" ))
462+ }
463+ }
464+
420465 # Changed.rsq setup ----
466+ var.model.orig <- var.model
421467 if (! is.null(changed.rsq.term.index )) {
422- terms.full.formula <- stats :: terms(formula )
468+
469+ # check if the term index is valid:
470+ if (min(changed.rsq.term.index ) < = 0 ) {
471+ stop(
472+ " There is element(s) in changed.rsq.term.index <= 0. " ,
473+ " It should be a (list of) positive integer!"
474+ )
475+ }
476+
477+ terms.full.formula <- stats :: terms(formula , keep.order = TRUE )
478+
479+ if (max(changed.rsq.term.index ) > length(labels(terms.full.formula ))) {
480+ stop(
481+ " Largest index in changed.rsq.term.index is more than the term number on the " ,
482+ " right hand side of formula!"
483+ )
484+ }
485+
486+ if (length(labels(terms.full.formula )) == 0 ) {
487+ stop(
488+ " Trying to analyze changed.rsq but there is no variable (except intercept 1) " ,
489+ " on right hand side of formula! Please provide at least one valid variable."
490+ )
491+ }
492+
423493 changed.rsq.term.fullFormat.list <- labels(terms.full.formula )[unlist(changed.rsq.term.index )]
424494 changed.rsq.term.shortFormat.list <- list ()
425495 for (idx in seq_along(changed.rsq.term.index )) {
0 commit comments