mxCompare2 <- function (base, comparison, ..., all = FALSE) { if (missing(base)) { stop("'base' argument be a MxModel object or list of MxModel objects") } garbageArguments <- list(...) if (length(garbageArguments) > 0) { stop("mxCompare does not accept values for the '...' argument") } if (is.list(base)) { base <- unlist(base) } else { base <- list(base) } if (!all(sapply(base, is, "MxModel"))) { stop("The 'base' argument must consist of MxModel objects") } baseSummaries <- omxLapply(base, summary) if (missing(comparison)) { resultsTable <- showFitStatistics2(baseSummaries, all=all) } else { if (is.list(comparison)) { comparison <- unlist(comparison) } else { comparison <- list(comparison) } if (!all(sapply(comparison, is, "MxModel"))) { stop("The 'comparison' argument must consist of MxModel objects") } compareSummaries <- omxLapply(comparison, summary) resultsTable <- showFitStatistics2(baseSummaries, compareSummaries, all) # resultsTable <- OpenMx:::showFitStatistics(baseSummaries, compareSummaries, all) } return(resultsTable) } showFitStatistics2 <- function (baseSummaries, compareSummaries, all) { statistics <- list() if (all) { for (i in 1:length(baseSummaries)) { nextBaseSummary <- baseSummaries[[i]] statistics[[length(statistics) + 1]] <- OpenMx:::collectBaseStatistics(nextBaseSummary) if (!missing(compareSummaries)) { for (j in 1:length(compareSummaries)) { nextCompareSummary <- compareSummaries[[j]] statistics[[length(statistics) + 1]] <- OpenMx:::collectStatistics(nextBaseSummary, nextCompareSummary) } } } } else { if (missing(compareSummaries)) { maxLength <- length(baseSummaries) previousBaseSummaryIndex <- (-1) for (i in 1:maxLength) { nextBaseSummaryIndex <- (i - 1)%%length(baseSummaries) + 1 nextBaseSummary <- baseSummaries[[nextBaseSummaryIndex]] if (previousBaseSummaryIndex != nextBaseSummaryIndex) { statistics[[length(statistics) + 1]] <- OpenMx:::collectBaseStatistics(nextBaseSummary) } previousBaseSummaryIndex <- nextBaseSummaryIndex } }else{ maxLength <- max(length(baseSummaries), length(compareSummaries)) previousBaseSummaryIndex <- (-1) for (i in 1:maxLength) { nextBaseSummaryIndex <- (i - 1)%%length(baseSummaries) + 1 nextCompareSummaryIndex <- (i - 1)%%length(compareSummaries) + 1 nextBaseSummary <- baseSummaries[[nextBaseSummaryIndex]] nextCompareSummary <- compareSummaries[[nextCompareSummaryIndex]] if (previousBaseSummaryIndex != nextBaseSummaryIndex) { statistics[[length(statistics) + 1]] <- OpenMx:::collectBaseStatistics(nextBaseSummary) } statistics[[length(statistics) + 1]] <- OpenMx:::collectStatistics(nextBaseSummary, nextCompareSummary) previousBaseSummaryIndex <- nextBaseSummaryIndex } } } statistics <- do.call(rbind, statistics) return(statistics) }