From ecaf2362f84c744453d39c22dc0605508427b652 Mon Sep 17 00:00:00 2001 From: Xihao Li Date: Thu, 6 Jul 2023 16:42:31 -0400 Subject: [PATCH] MetaSTAAR v0.9.6.3 --- .github/workflows/R-CMD-check.yaml | 2 +- .travis.yml | 15 +++---------- DESCRIPTION | 6 ++--- R/MetaSTAAR_individual_analysis.R | 5 +---- R/MetaSTAAR_merge.R | 30 +++++-------------------- R/MetaSTAAR_merge_cond.R | 35 ++++++----------------------- R/MetaSTAAR_merge_varlist.R | 30 +++++-------------------- R/MetaSTAAR_merge_varlist_cond.R | 35 ++++++----------------------- R/MetaSTAAR_worker_cov.R | 2 +- R/MetaSTAAR_worker_cov_cond.R | 2 +- R/MetaSTAAR_worker_sumstat.R | 2 +- README.md | 2 +- docs/MetaSTAAR_manual.pdf | Bin 128139 -> 128054 bytes 13 files changed, 38 insertions(+), 128 deletions(-) diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml index 8130288..ebf175d 100644 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -11,7 +11,7 @@ jobs: - uses: actions/checkout@v3 - uses: r-lib/actions/setup-r@v2 with: - r-version: 4.3.0 + r-version: 4.2.3 - name: Install BiocManager run: | if (!requireNamespace("BiocManager", quietly = TRUE)) install.packages("BiocManager") diff --git a/.travis.yml b/.travis.yml index cf41e03..626ccaf 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,21 +7,12 @@ branches: language: r r: - 4.1.2 - -before_install: - - mkdir -p ~/.R - - echo 'CXX17 = g++-7 -std=gnu++17 -fPIC' > ~/.R/Makevars - - while travis_wait 50 sleep 300 &> /tmp/build.log || (tail -n 100 /tmp/build.log && exit 1); do echo "=====[ $SECONDS seconds, buildroot still building... ]====="; done - -addons: - apt: - sources: - - sourceline: 'ppa:ubuntu-toolchain-r/test' - packages: - - g++-7 warnings_are_errors: false +r_binary_packages: +- glmnet + bioc_packages: - GENESIS diff --git a/DESCRIPTION b/DESCRIPTION index 65e7749..34b6539 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,10 +1,10 @@ Package: MetaSTAAR Type: Package Title: Meta-Analysis of STAAR (MetaSTAAR) Procedure for Dynamic Incorporation of Multiple Functional Annotations in Whole Genome Sequencing Studies -Version: 0.9.6.2 -Date: 2023-07-05 +Version: 0.9.6.3 +Date: 2023-11-18 Author: Xihao Li [aut, cre], Zilin Li [aut, cre], Corbin Quick [aut] -Maintainer: Xihao Li , Zilin Li +Maintainer: Xihao Li , Zilin Li Description: An R package for performing MetaSTAAR procedure in whole genome sequencing studies. License: GPL-3 Copyright: See COPYRIGHTS for details. diff --git a/R/MetaSTAAR_individual_analysis.R b/R/MetaSTAAR_individual_analysis.R index 7d84618..d010d7b 100644 --- a/R/MetaSTAAR_individual_analysis.R +++ b/R/MetaSTAAR_individual_analysis.R @@ -46,10 +46,7 @@ MetaSTAAR_individual_analysis <- function(chr,start.loc,end.loc,study.names,samp if (end.loc <= segment * segment.size) { ### summary statistics sumstat.files <- paste0(sumstat.dir,"/summary.stat.",trait,".",study.names,".chr",chr,".segment",segment,".Rdata") - sumstat.list <- lapply(sumstat.files, function(x) { - load(file = x) - get(ls()[ls()!= "summary.stat"]) - }) + sumstat.list <- sapply(sumstat.files, function(x) mget(load(x)), simplify = TRUE) sumstat.list <- lapply(sumstat.list, function(x) { if (!(is.null(x)) && !("qc_label" %in% colnames(x))){ data.frame(x[,1:4],qc_label="PASS",x[,5:dim(x)[2]],stringsAsFactors = FALSE) diff --git a/R/MetaSTAAR_merge.R b/R/MetaSTAAR_merge.R index a93b1ea..9d9b0b6 100644 --- a/R/MetaSTAAR_merge.R +++ b/R/MetaSTAAR_merge.R @@ -54,10 +54,7 @@ MetaSTAAR_merge <- function(chr,start.loc,end.loc,study.names,sample.sizes,sumst if (end.loc <= segment * segment.size) { ### summary statistics sumstat.files <- paste0(sumstat.dir,"/summary.stat.",trait,".",study.names,".chr",chr,".segment",segment,".Rdata") - sumstat.list <- lapply(sumstat.files, function(x) { - load(file = x) - get(ls()[ls()!= "summary.stat"]) - }) + sumstat.list <- sapply(sumstat.files, function(x) mget(load(x)), simplify = TRUE) sumstat.list <- lapply(sumstat.list, function(x) { if (!(is.null(x)) && !("qc_label" %in% colnames(x))){ data.frame(x[,1:4],qc_label="PASS",x[,5:dim(x)[2]],stringsAsFactors = FALSE) @@ -113,10 +110,7 @@ MetaSTAAR_merge <- function(chr,start.loc,end.loc,study.names,sample.sizes,sumst ### covariance matrices cov.files <- paste0(cov.dir,"/GTSinvG.rare.",trait,".",study.names,".chr",chr,".segment",segment,".Rdata") - cov.list <- lapply(cov.files, function(x) { - load(file = x) - get(ls()[ls()!= "cov"]) - }) + cov.list <- sapply(cov.files, function(x) mget(load(x)), simplify = TRUE) cov.list <- lapply(cov.list, function(x) { if (is.null(x)) { as(matrix(nrow=0,ncol=0),"dgCMatrix") @@ -147,10 +141,7 @@ MetaSTAAR_merge <- function(chr,start.loc,end.loc,study.names,sample.sizes,sumst }else if (end.loc <= (segment + 1) * segment.size) { ### summary statistics sumstat.files1 <- paste0(sumstat.dir,"/summary.stat.",trait,".",study.names,".chr",chr,".segment",segment,".Rdata") - sumstat.list1 <- lapply(sumstat.files1, function(x) { - load(file = x) - get(ls()[ls()!= "summary.stat"]) - }) + sumstat.list1 <- sapply(sumstat.files1, function(x) mget(load(x)), simplify = TRUE) sumstat.list1 <- lapply(sumstat.list1, function(x) { if (!(is.null(x)) && !("qc_label" %in% colnames(x))){ data.frame(x[,1:4],qc_label="PASS",x[,5:dim(x)[2]],stringsAsFactors = FALSE) @@ -169,10 +160,7 @@ MetaSTAAR_merge <- function(chr,start.loc,end.loc,study.names,sample.sizes,sumst }, x = sumstat.list1, y = cov_maf_cutoff, SIMPLIFY = FALSE) sumstat.files2 <- paste0(sumstat.dir,"/summary.stat.",trait,".",study.names,".chr",chr,".segment",segment+1,".Rdata") - sumstat.list2 <- lapply(sumstat.files2, function(x) { - load(file = x) - get(ls()[ls()!= "summary.stat"]) - }) + sumstat.list2 <- sapply(sumstat.files2, function(x) mget(load(x)), simplify = TRUE) sumstat.list2 <- lapply(sumstat.list2, function(x) { if (!(is.null(x)) && !("qc_label" %in% colnames(x))){ data.frame(x[,1:4],qc_label="PASS",x[,5:dim(x)[2]],stringsAsFactors = FALSE) @@ -247,10 +235,7 @@ MetaSTAAR_merge <- function(chr,start.loc,end.loc,study.names,sample.sizes,sumst ### covariance matrices cov.files1 <- paste0(cov.dir,"/GTSinvG.rare.",trait,".",study.names,".chr",chr,".segment",segment,".Rdata") - cov.list1 <- lapply(cov.files1, function(x) { - load(file = x) - get(ls()[ls()!= "cov"]) - }) + cov.list1 <- sapply(cov.files1, function(x) mget(load(x)), simplify = TRUE) cov.list1 <- mapply(function(x,y,z) { if (is.null(x)) { x <- as(matrix(nrow=length(y),ncol=(length(y)+length(z))),"dgCMatrix") @@ -259,10 +244,7 @@ MetaSTAAR_merge <- function(chr,start.loc,end.loc,study.names,sample.sizes,sumst }, x = cov.list1, y = position.index1, z = position.index2, SIMPLIFY = FALSE) cov.files2 <- paste0(cov.dir,"/GTSinvG.rare.",trait,".",study.names,".chr",chr,".segment",segment+1,".Rdata") - cov.list2 <- lapply(cov.files2, function(x) { - load(file = x) - get(ls()[ls()!= "cov"]) - }) + cov.list2 <- sapply(cov.files2, function(x) mget(load(x)), simplify = TRUE) cov.list2 <- lapply(cov.list2, function(x) { if (is.null(x)) { as(matrix(nrow=0,ncol=0),"dgCMatrix") diff --git a/R/MetaSTAAR_merge_cond.R b/R/MetaSTAAR_merge_cond.R index ccd8ec4..e7f4788 100644 --- a/R/MetaSTAAR_merge_cond.R +++ b/R/MetaSTAAR_merge_cond.R @@ -66,10 +66,7 @@ MetaSTAAR_merge_cond <- function(chr,start.loc,end.loc,study.names,sample.sizes, if (end.loc <= segment * segment.size) { ### summary statistics sumstat.files <- paste0(sumstat.dir,"/summary.stat.",trait,".",study.names,".chr",chr,".segment",segment,".Rdata") - sumstat.list <- lapply(sumstat.files, function(x) { - load(file = x) - get(ls()[ls()!= "summary.stat"]) - }) + sumstat.list <- sapply(sumstat.files, function(x) mget(load(x)), simplify = TRUE) sumstat.list <- lapply(sumstat.list, function(x) { if (!(is.null(x)) && !("qc_label" %in% colnames(x))){ data.frame(x[,1:4],qc_label="PASS",x[,5:dim(x)[2]],stringsAsFactors = FALSE) @@ -125,10 +122,7 @@ MetaSTAAR_merge_cond <- function(chr,start.loc,end.loc,study.names,sample.sizes, ### covariance matrices cov.files <- paste0(cov.dir,"/GTSinvG.rare.",trait,".",study.names,".chr",chr,".segment",segment,".Rdata") - cov.list <- lapply(cov.files, function(x) { - load(file = x) - get(ls()[ls()!= "cov"]) - }) + cov.list <- sapply(cov.files, function(x) mget(load(x)), simplify = TRUE) cov.list <- lapply(cov.list, function(x) { if (is.null(x)) { as(matrix(nrow=0,ncol=0),"dgCMatrix") @@ -159,10 +153,7 @@ MetaSTAAR_merge_cond <- function(chr,start.loc,end.loc,study.names,sample.sizes, }else if (end.loc <= (segment + 1) * segment.size) { ### summary statistics sumstat.files1 <- paste0(sumstat.dir,"/summary.stat.",trait,".",study.names,".chr",chr,".segment",segment,".Rdata") - sumstat.list1 <- lapply(sumstat.files1, function(x) { - load(file = x) - get(ls()[ls()!= "summary.stat"]) - }) + sumstat.list1 <- sapply(sumstat.files1, function(x) mget(load(x)), simplify = TRUE) sumstat.list1 <- lapply(sumstat.list1, function(x) { if (!(is.null(x)) && !("qc_label" %in% colnames(x))){ data.frame(x[,1:4],qc_label="PASS",x[,5:dim(x)[2]],stringsAsFactors = FALSE) @@ -181,10 +172,7 @@ MetaSTAAR_merge_cond <- function(chr,start.loc,end.loc,study.names,sample.sizes, }, x = sumstat.list1, y = cov_maf_cutoff, SIMPLIFY = FALSE) sumstat.files2 <- paste0(sumstat.dir,"/summary.stat.",trait,".",study.names,".chr",chr,".segment",segment+1,".Rdata") - sumstat.list2 <- lapply(sumstat.files2, function(x) { - load(file = x) - get(ls()[ls()!= "summary.stat"]) - }) + sumstat.list2 <- sapply(sumstat.files2, function(x) mget(load(x)), simplify = TRUE) sumstat.list2 <- lapply(sumstat.list2, function(x) { if (!(is.null(x)) && !("qc_label" %in% colnames(x))){ data.frame(x[,1:4],qc_label="PASS",x[,5:dim(x)[2]],stringsAsFactors = FALSE) @@ -259,10 +247,7 @@ MetaSTAAR_merge_cond <- function(chr,start.loc,end.loc,study.names,sample.sizes, ### covariance matrices cov.files1 <- paste0(cov.dir,"/GTSinvG.rare.",trait,".",study.names,".chr",chr,".segment",segment,".Rdata") - cov.list1 <- lapply(cov.files1, function(x) { - load(file = x) - get(ls()[ls()!= "cov"]) - }) + cov.list1 <- sapply(cov.files1, function(x) mget(load(x)), simplify = TRUE) cov.list1 <- mapply(function(x,y,z) { if (is.null(x)) { x <- as(matrix(nrow=length(y),ncol=(length(y)+length(z))),"dgCMatrix") @@ -271,10 +256,7 @@ MetaSTAAR_merge_cond <- function(chr,start.loc,end.loc,study.names,sample.sizes, }, x = cov.list1, y = position.index1, z = position.index2, SIMPLIFY = FALSE) cov.files2 <- paste0(cov.dir,"/GTSinvG.rare.",trait,".",study.names,".chr",chr,".segment",segment+1,".Rdata") - cov.list2 <- lapply(cov.files2, function(x) { - load(file = x) - get(ls()[ls()!= "cov"]) - }) + cov.list2 <- sapply(cov.files2, function(x) mget(load(x)), simplify = TRUE) cov.list2 <- lapply(cov.list2, function(x) { if (is.null(x)) { as(matrix(nrow=0,ncol=0),"dgCMatrix") @@ -326,10 +308,7 @@ MetaSTAAR_merge_cond <- function(chr,start.loc,end.loc,study.names,sample.sizes, ### covariance files for conditional analysis covcond.files <- paste0(covcond.dir,"/cov.cond.",trait,".",study.names,".chr",chr,".region.",region,".Rdata") - covcond.list <- lapply(covcond.files, function(x) { - load(file = x) - get(ls()[ls()!= "cov.cond"]) - }) + covcond.list <- sapply(covcond.files, function(x) mget(load(x)), simplify = TRUE) variant_info_list <- lapply(covcond.list, function(x) {x$variant_info}) variant_info_merge <- do.call("rbind",variant_info_list) variant_info_nodup <- variant_info_merge[!duplicated(variant_info_merge),] diff --git a/R/MetaSTAAR_merge_varlist.R b/R/MetaSTAAR_merge_varlist.R index 6a78d87..29ee5cb 100644 --- a/R/MetaSTAAR_merge_varlist.R +++ b/R/MetaSTAAR_merge_varlist.R @@ -55,10 +55,7 @@ MetaSTAAR_merge_varlist <- function(chr,variant_pos,study.names,sample.sizes,sum if (max(variant_pos) <= segment * segment.size) { ### summary statistics sumstat.files <- paste0(sumstat.dir,"/summary.stat.",trait,".",study.names,".chr",chr,".segment",segment,".Rdata") - sumstat.list <- lapply(sumstat.files, function(x) { - load(file = x) - get(ls()[ls()!= "summary.stat"]) - }) + sumstat.list <- sapply(sumstat.files, function(x) mget(load(x)), simplify = TRUE) sumstat.list <- lapply(sumstat.list, function(x) { if (!(is.null(x)) && !("qc_label" %in% colnames(x))){ data.frame(x[,1:4],qc_label="PASS",x[,5:dim(x)[2]],stringsAsFactors = FALSE) @@ -114,10 +111,7 @@ MetaSTAAR_merge_varlist <- function(chr,variant_pos,study.names,sample.sizes,sum ### covariance matrices cov.files <- paste0(cov.dir,"/GTSinvG.rare.",trait,".",study.names,".chr",chr,".segment",segment,".Rdata") - cov.list <- lapply(cov.files, function(x) { - load(file = x) - get(ls()[ls()!= "cov"]) - }) + cov.list <- sapply(cov.files, function(x) mget(load(x)), simplify = TRUE) cov.list <- lapply(cov.list, function(x) { if (is.null(x)) { as(matrix(nrow=0,ncol=0),"dgCMatrix") @@ -148,10 +142,7 @@ MetaSTAAR_merge_varlist <- function(chr,variant_pos,study.names,sample.sizes,sum }else if (max(variant_pos) <= (segment + 1) * segment.size) { ### summary statistics sumstat.files1 <- paste0(sumstat.dir,"/summary.stat.",trait,".",study.names,".chr",chr,".segment",segment,".Rdata") - sumstat.list1 <- lapply(sumstat.files1, function(x) { - load(file = x) - get(ls()[ls()!= "summary.stat"]) - }) + sumstat.list1 <- sapply(sumstat.files1, function(x) mget(load(x)), simplify = TRUE) sumstat.list1 <- lapply(sumstat.list1, function(x) { if (!(is.null(x)) && !("qc_label" %in% colnames(x))){ data.frame(x[,1:4],qc_label="PASS",x[,5:dim(x)[2]],stringsAsFactors = FALSE) @@ -170,10 +161,7 @@ MetaSTAAR_merge_varlist <- function(chr,variant_pos,study.names,sample.sizes,sum }, x = sumstat.list1, y = cov_maf_cutoff, SIMPLIFY = FALSE) sumstat.files2 <- paste0(sumstat.dir,"/summary.stat.",trait,".",study.names,".chr",chr,".segment",segment+1,".Rdata") - sumstat.list2 <- lapply(sumstat.files2, function(x) { - load(file = x) - get(ls()[ls()!= "summary.stat"]) - }) + sumstat.list2 <- sapply(sumstat.files2, function(x) mget(load(x)), simplify = TRUE) sumstat.list2 <- lapply(sumstat.list2, function(x) { if (!(is.null(x)) && !("qc_label" %in% colnames(x))){ data.frame(x[,1:4],qc_label="PASS",x[,5:dim(x)[2]],stringsAsFactors = FALSE) @@ -248,10 +236,7 @@ MetaSTAAR_merge_varlist <- function(chr,variant_pos,study.names,sample.sizes,sum ### covariance matrices cov.files1 <- paste0(cov.dir,"/GTSinvG.rare.",trait,".",study.names,".chr",chr,".segment",segment,".Rdata") - cov.list1 <- lapply(cov.files1, function(x) { - load(file = x) - get(ls()[ls()!= "cov"]) - }) + cov.list1 <- sapply(cov.files1, function(x) mget(load(x)), simplify = TRUE) cov.list1 <- mapply(function(x,y,z) { if (is.null(x)) { x <- as(matrix(nrow=length(y),ncol=(length(y)+length(z))),"dgCMatrix") @@ -260,10 +245,7 @@ MetaSTAAR_merge_varlist <- function(chr,variant_pos,study.names,sample.sizes,sum }, x = cov.list1, y = position.index1, z = position.index2, SIMPLIFY = FALSE) cov.files2 <- paste0(cov.dir,"/GTSinvG.rare.",trait,".",study.names,".chr",chr,".segment",segment+1,".Rdata") - cov.list2 <- lapply(cov.files2, function(x) { - load(file = x) - get(ls()[ls()!= "cov"]) - }) + cov.list2 <- sapply(cov.files2, function(x) mget(load(x)), simplify = TRUE) cov.list2 <- lapply(cov.list2, function(x) { if (is.null(x)) { as(matrix(nrow=0,ncol=0),"dgCMatrix") diff --git a/R/MetaSTAAR_merge_varlist_cond.R b/R/MetaSTAAR_merge_varlist_cond.R index 22a0442..59b7ef1 100644 --- a/R/MetaSTAAR_merge_varlist_cond.R +++ b/R/MetaSTAAR_merge_varlist_cond.R @@ -67,10 +67,7 @@ MetaSTAAR_merge_varlist_cond <- function(chr,variant_pos,study.names,sample.size if (max(variant_pos) <= segment * segment.size) { ### summary statistics sumstat.files <- paste0(sumstat.dir,"/summary.stat.",trait,".",study.names,".chr",chr,".segment",segment,".Rdata") - sumstat.list <- lapply(sumstat.files, function(x) { - load(file = x) - get(ls()[ls()!= "summary.stat"]) - }) + sumstat.list <- sapply(sumstat.files, function(x) mget(load(x)), simplify = TRUE) sumstat.list <- lapply(sumstat.list, function(x) { if (!(is.null(x)) && !("qc_label" %in% colnames(x))){ data.frame(x[,1:4],qc_label="PASS",x[,5:dim(x)[2]],stringsAsFactors = FALSE) @@ -126,10 +123,7 @@ MetaSTAAR_merge_varlist_cond <- function(chr,variant_pos,study.names,sample.size ### covariance matrices cov.files <- paste0(cov.dir,"/GTSinvG.rare.",trait,".",study.names,".chr",chr,".segment",segment,".Rdata") - cov.list <- lapply(cov.files, function(x) { - load(file = x) - get(ls()[ls()!= "cov"]) - }) + cov.list <- sapply(cov.files, function(x) mget(load(x)), simplify = TRUE) cov.list <- lapply(cov.list, function(x) { if (is.null(x)) { as(matrix(nrow=0,ncol=0),"dgCMatrix") @@ -160,10 +154,7 @@ MetaSTAAR_merge_varlist_cond <- function(chr,variant_pos,study.names,sample.size }else if (max(variant_pos) <= (segment + 1) * segment.size) { ### summary statistics sumstat.files1 <- paste0(sumstat.dir,"/summary.stat.",trait,".",study.names,".chr",chr,".segment",segment,".Rdata") - sumstat.list1 <- lapply(sumstat.files1, function(x) { - load(file = x) - get(ls()[ls()!= "summary.stat"]) - }) + sumstat.list1 <- sapply(sumstat.files1, function(x) mget(load(x)), simplify = TRUE) sumstat.list1 <- lapply(sumstat.list1, function(x) { if (!(is.null(x)) && !("qc_label" %in% colnames(x))){ data.frame(x[,1:4],qc_label="PASS",x[,5:dim(x)[2]],stringsAsFactors = FALSE) @@ -182,10 +173,7 @@ MetaSTAAR_merge_varlist_cond <- function(chr,variant_pos,study.names,sample.size }, x = sumstat.list1, y = cov_maf_cutoff, SIMPLIFY = FALSE) sumstat.files2 <- paste0(sumstat.dir,"/summary.stat.",trait,".",study.names,".chr",chr,".segment",segment+1,".Rdata") - sumstat.list2 <- lapply(sumstat.files2, function(x) { - load(file = x) - get(ls()[ls()!= "summary.stat"]) - }) + sumstat.list2 <- sapply(sumstat.files2, function(x) mget(load(x)), simplify = TRUE) sumstat.list2 <- lapply(sumstat.list2, function(x) { if (!(is.null(x)) && !("qc_label" %in% colnames(x))){ data.frame(x[,1:4],qc_label="PASS",x[,5:dim(x)[2]],stringsAsFactors = FALSE) @@ -260,10 +248,7 @@ MetaSTAAR_merge_varlist_cond <- function(chr,variant_pos,study.names,sample.size ### covariance matrices cov.files1 <- paste0(cov.dir,"/GTSinvG.rare.",trait,".",study.names,".chr",chr,".segment",segment,".Rdata") - cov.list1 <- lapply(cov.files1, function(x) { - load(file = x) - get(ls()[ls()!= "cov"]) - }) + cov.list1 <- sapply(cov.files1, function(x) mget(load(x)), simplify = TRUE) cov.list1 <- mapply(function(x,y,z) { if (is.null(x)) { x <- as(matrix(nrow=length(y),ncol=(length(y)+length(z))),"dgCMatrix") @@ -272,10 +257,7 @@ MetaSTAAR_merge_varlist_cond <- function(chr,variant_pos,study.names,sample.size }, x = cov.list1, y = position.index1, z = position.index2, SIMPLIFY = FALSE) cov.files2 <- paste0(cov.dir,"/GTSinvG.rare.",trait,".",study.names,".chr",chr,".segment",segment+1,".Rdata") - cov.list2 <- lapply(cov.files2, function(x) { - load(file = x) - get(ls()[ls()!= "cov"]) - }) + cov.list2 <- sapply(cov.files2, function(x) mget(load(x)), simplify = TRUE) cov.list2 <- lapply(cov.list2, function(x) { if (is.null(x)) { as(matrix(nrow=0,ncol=0),"dgCMatrix") @@ -371,10 +353,7 @@ MetaSTAAR_merge_varlist_cond <- function(chr,variant_pos,study.names,sample.size ### covariance files for conditional analysis covcond.files <- paste0(covcond.dir,"/cov.cond.",trait,".",study.names,".chr",chr,".region.",region,".Rdata") - covcond.list <- lapply(covcond.files, function(x) { - load(file = x) - get(ls()[ls()!= "cov.cond"]) - }) + covcond.list <- sapply(covcond.files, function(x) mget(load(x)), simplify = TRUE) variant_info_list <- lapply(covcond.list, function(x) {x$variant_info}) variant_info_merge <- do.call("rbind",variant_info_list) variant_info_nodup <- variant_info_merge[!duplicated(variant_info_merge),] diff --git a/R/MetaSTAAR_worker_cov.R b/R/MetaSTAAR_worker_cov.R index 3a1f3eb..a178716 100644 --- a/R/MetaSTAAR_worker_cov.R +++ b/R/MetaSTAAR_worker_cov.R @@ -35,7 +35,7 @@ MetaSTAAR_worker_cov <- function(genotype,obj_nullmodel,cov_maf_cutoff, variant_pos,region_midpos,qc_label=NULL,segment.size=5e5,signif.digits=3){ - if(!inherits(genotype, "matrix") && !inherits(genotype, "sparseMatrix")){ + if(!inherits(genotype, "matrix") && !inherits(genotype, "Matrix")){ stop("genotype is not a matrix!") } diff --git a/R/MetaSTAAR_worker_cov_cond.R b/R/MetaSTAAR_worker_cov_cond.R index 2fc8631..2f1c7dc 100644 --- a/R/MetaSTAAR_worker_cov_cond.R +++ b/R/MetaSTAAR_worker_cov_cond.R @@ -39,7 +39,7 @@ MetaSTAAR_worker_cov_cond <- function(genotype,genotype_adj,obj_nullmodel,variant_info,variant_adj_info){ - if(!inherits(genotype, "matrix") && !inherits(genotype, "sparseMatrix")){ + if(!inherits(genotype, "matrix") && !inherits(genotype, "Matrix")){ stop("genotype is not a matrix!") } diff --git a/R/MetaSTAAR_worker_sumstat.R b/R/MetaSTAAR_worker_sumstat.R index 3c1c51d..03f3839 100644 --- a/R/MetaSTAAR_worker_sumstat.R +++ b/R/MetaSTAAR_worker_sumstat.R @@ -26,7 +26,7 @@ MetaSTAAR_worker_sumstat <- function(genotype,obj_nullmodel,variant_info,qc_label=NULL){ - if(!inherits(genotype, "matrix") && !inherits(genotype, "sparseMatrix")){ + if(!inherits(genotype, "matrix") && !inherits(genotype, "Matrix")){ stop("genotype is not a matrix!") } diff --git a/README.md b/README.md index f15d49f..b072e97 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ Please see the **MetaSTAAR** user manual ## Data Availability The whole-genome functional annotation data assembled from a variety of sources and the precomputed annotation principal components are available at the [Functional Annotation of Variant - Online Resource (FAVOR)](https://favor.genohub.org) site and [FAVOR Essential Database](https://doi.org/10.7910/DVN/1VGTJI). ## Version -The current version is 0.9.6.2 (July 5, 2023). +The current version is 0.9.6.3 (November 18, 2023). ## Citation If you use **MetaSTAAR** for your work, please cite: diff --git a/docs/MetaSTAAR_manual.pdf b/docs/MetaSTAAR_manual.pdf index 451f161e2550db2263bcdc535a03589e228b6d93..623a4f611aa83c96a70c22a8b840cb07a54de6ad 100644 GIT binary patch delta 24319 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 delta 24342 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 SJSBzzKOY7?y^M-1#{U9Ri(YL2