CHANGES IN VERSION 1.46.0 ------------------------- UTILITIES o `seqGetData()` return NULL, if 'var.name=character()' CHANGES IN VERSION 1.44.3 ------------------------- UTILITIES o update the C codes according to '_R_USE_STRICT_R_HEADERS_=true' & '_R_CXX_USE_NO_REMAP_=true' CHANGES IN VERSION 1.44.2 ------------------------- BUG FIXES o fix `seqAddValue(, val=vector("list", NUM_VARIANT))` o fix the ploidy returned from `seqVCF_Header()`, when there are genotypes of males and females on Chromosome X CHANGES IN VERSION 1.44.1 ------------------------- UTILITIES o new option 'numvariant' in `seqEmptyFile()` BUG FIXES o `seqMerge()` should internally use "chr_position_ref_alt" to distinguish the variants in different files o `seqAddValue(, varnm="annotation/filter")` should work with a factor variable o `seqAddValue(, varnm="variant.id")` can reset the variant IDs with a different number of the variants CHANGES IN VERSION 1.44.0 ------------------------- UTILITIES o tweak the display of progress information in `seqVCF2GDS()` o `seqVCF_Header(, getnum=TRUE, verbose=TRUE)` to show the progress information for scanning the VCF file o new `seqGetData(, "$dosage_alt2")` and `seqGetData(, "$dosage_sp2")` for sex chromosomes, when the alleles are partially missing (e.g., genotypes on chromosome X for males) o new 'verbose.clean' in `seqExport()` to control how much information to be displayed CHANGES IN VERSION 1.42.4 ------------------------- BUG FIXES o `seqGetData(, "$dosage_alt")` and `seqGetData(, "$dosage_sp")` work correctly when the ploidy is >2 and there are missing alleles o fix a bug that `seqParallel()` does not call a user-defined '.combine' when 'parallel=1' CHANGES IN VERSION 1.42.1 ------------------------- UTILITIES o update the help files of `seqBlockApply()` and `seqUnitApply()` o detect the output filename extension in `seqGDS2VCF()` without considering the case of the characters, supporting .gz, .bgz, .bz and .xz as a filename extension o fix the compiler warning: -Wformat-security o new option 'include.pheno=TRUE' in `seqBED2GDS()` CHANGES IN VERSION 1.42.0 ------------------------- UTILITIES o new option 'write.rsid' in `seqGDS2BED()` CHANGES IN VERSION 1.40.1 ------------------------- BUG FIXES o `seqAddValue(gdsfile, varnm="position")` works correctly CHANGES IN VERSION 1.40.0 ------------------------- o fix the compiler warning: sprintf is deprecated CHANGES IN VERSION 1.38.0 ------------------------- UTILITIES o new option 'ext_nbyte' in `seqGet2bGeno()` o `seqAlleleCount()` and `seqGetAF_AC_Missing()` return NA instead of zero when all genotypes are missing at a site o `seqGDS2VCF()` does not output the FORMAT column if there is no selected sample (e.g., site-only VCF files) o `seqGetData(, "$chrom_pos2")` is similar to `seqGetData(, "$chrom_pos")` except the duplicates with the suffix ("_1", "_2" or >2) NEW FEATURES o `seqGDS2BED()` can convert to PLINK BED files with the best-guess genotypes when there are only numeric dosages in the GDS file o `seqEmptyFile()` outputs an empty GDS file CHANGES IN VERSION 1.36.2 ------------------------- BUG FIXES o fix the bug at multi-allelic sites with more than 15 different alleles, see https://github.com/zhengxwen/SeqArray/issues/78 CHANGES IN VERSION 1.36.1 ------------------------- BUG FIXES o `seqExport()` failed when there is no variant o `seqSetFilter(, ret.idx=TRUE)`, see https://github.com/zhengxwen/SeqArray/issues/80 CHANGES IN VERSION 1.36.0 ------------------------- NEW FEATURES o new functions `seqUnitCreate()`, `seqUnitSubset()` and `seqUnitMerge()` o new functions `seqFilterPush()` and `seqFilterPop()` o new functions `seqGet2bGeno()` and `seqGetAF_AC_Missing()` o new function `seqGetData(, "$dosage_sp")` for a sparse matrix of dosages o the first argument 'gdsfile' can be a file name in `seqAlleleFreq()`, `seqAlleleCount()`, `seqMissing()` o new function `seqMulticoreSetup()` for setting a multicore cluster according to a numeric value assigned to the argument 'parallel' UTILITIES o allow opening a duplicated GDS file ('allow.duplicate=TRUE') when the input is a file name instead of a GDS object in `seqGDS2VCF()`, `seqGDS2SNP()`, `seqGDS2BED()`, `seqVCF2GDS()`, `seqSummary()`, `seqCheck()` and `seqMerge()` o remove the deprecated '.progress' in `seqMissing()`, `seqAlleleCount()` and `seqAlleleFreq()` o add `summary.SeqUnitListClass()` o no genotype and phase data nodes from `seqSNP2GDS()` if SNP dosage GDS is the input BUG FIXES o `seqUnitApply()` works correctly with selected samples if 'parallel' is a non-fork cluster o `seqVCF2GDS()` and `seqVCF_Header()` work correctly if the VCF header has white space o `seqGDS2BED()` with selected samples for sex and phenotype information o `seqGDS2VCF()` failed if there is no 'genotype/data' in the GDS file CHANGES IN VERSION 1.32.0 ------------------------- NEW FEATURES o new option 'ret.idx' in `seqSetFilter()` for unsorted sample and variant indices o new option 'ret.idx' in `seqSetFilterAnnotID()` for unsorted variant index o rewrite the function `seqSetFilterPos()`: new options 'ref' and 'alt', 'multi.pos=TRUE' by default o new option 'packed.idx' in `seqAddValue()` for packing an indexing variable o new option 'warn' in `seqSetFilter()` to enable or disable the warning o new functions `seqNewVarData()` and `seqListVarData()` for variable-length data UTILITIES o allow no variant in `seqApply()` and `seqBlockApply()` o the list object returned from `seqGetData()` always have names if there are more than one input variable names BUG FIXES o `seqGDS2VCF()` should output "." instead of NA in the FILTER column o `seqGetData()` should support factor when '.padNA=TRUE' or '.tolist=TRUE' o fix `seqGDS2VCF()` with factor variables o `seqSummary(gds, "$filter")` should return a data frame with zero row if 'annotation/filter' is not a factor CHANGES IN VERSION 1.30.0 ------------------------- UTILITIES o show a warning when an unsorted index is used in `seqSetFilter()` o show a message if `seqVCF_Header()` fails o a new option 'chr_prefix' in `seqGDS2VCF()` BUG FIXES o `seqVCF_Header()` fixes 'contig' in the header of VCF if there are different fields CHANGES IN VERSION 1.28.1 ------------------------- BUG FIXES o `seqRecompress(, verbose=FALSE)` works correctly o `seqSetFilter(, action="push+set")` should not reset the filter before setting a new filter CHANGES IN VERSION 1.28.0 ------------------------- NEW FEATURES o new functions `seqUnitSlidingWindows()`, `seqUnitApply()`, `seqUnitFilterCond()` o new variable "$variant_index", "$sample_index" in `SeqGetData()`, `seqBlockApply()` and `seqUnitApply()` to get the indices of selected variants o new arguments '.padNA' and '.envir' in `seqGetData()` o new functions `seqSetFilterAnnotID()` and `seqGDS2BED()` o multicore function in `seqBED2GDS(, parallel=)` o new package-wide option `options(seqarray.nofork=TRUE)` to disable forking o new option 'minor' in `seqAlleleFreq()` and `seqAlleleCount()` o new option 'verbose' in `seqMissing()`, `seqAlleleFreq()` and `seqAlleleCount()`; '.progress' is deprecated, but still can be used for compatiblity o `seqAlleleFreq()`, `seqAlleleCount()`, `seqMissing()`, `seqSetFilterCond()` work on 'annotation/format/DS', if 'genotype/data' is not available UTILITIES o `seqAddValue()` adds vectors, matrices and data frame to "annotation/info" o `seqBED2GDS()` allows a single file name without the extended file names (.bed, .fam, .bim) o allele flip in `seqBED2GDS()` to allow major allele to be reference o rewrite `seqGetData()` for faster loading o significantly improve `seqBlockApply()` on 'annotation/info/VARIABLE' (https://github.com/zhengxwen/SeqArray/issues/59) o add a S3 method `print.SeqVCFHeaderClass()` for `seqVCF_Header()` o new option '.tolist' in `seqGetData()`, `seqBlockApply()` and `seqUnitApply()` o String "." in a VCF file are converted to a blank string (missing value) in `seqVCF2GDS()` o add a class name 'SeqVarDataList' to the returned 'list(length, data)' from `seqGetData()` o new option `seqMissing(, per.variant=NA)` o add `comment.char=""` to `seqBED2GDS()` CHANGES IN VERSION 1.26.2 ------------------------- NEW FEATURES o multiple variable names are allowed in `seqGetData(, var.name=)` BUG FIXES o fix `seqGetData(, "genotype", .useraw=NA)` (https://github.com/zhengxwen/SeqArray/issues/58) CHANGES IN VERSION 1.26.1 ------------------------- BUG FIXES o fails to correctly select duplicate indices in `seqSetFilter(f, variant.sel=)` CHANGES IN VERSION 1.26.0 ------------------------- NEW FEATURES o new function `seqAddValue()` UTILITIES o RLE chromosome coding in `seqBED2GDS()` o change the file name "vignettes/R_Integration.Rmd" to "vignettes/SeqArray.Rmd", so `vignette("SeqArray")` can work directly o correct Estimated remaining Time to Complete (ETC) for load balancing in `seqParallel()` BUG FIXES o `seqBED2GDS(, verbose=FALSE)` should have no display CHANGES o use a svg file instead of png in vignettes CHANGES IN VERSION 1.24.2 ------------------------- NEW FEATURES o add the compiler information in `seqSystem()` o new arguments '.balancing', '.bl_size' and '.bl_progress' in `seqParallel()` for load balancing UTILITIES o improve unix forking processes for load balancing in `seqParallel()` BUG FIXES o fix `seqSummary()` when no phase data CHANGES IN VERSION 1.24.0 ------------------------- NEW FEATURES o a new function `seqResetVariantID()` o a new option in `seqRecompress(, compress="none")` to uncompress all data o `seqGetData()` allows a GDS file name in the first argument CHANGES IN VERSION 1.22.6 ------------------------- BUG FIXES o `seqSetFilter(, sample.id=)` fails to correctly select samples in a few cases (since SeqArray>=v1.22.0 uses the distribution of selected samples to optimize the data access of genotypes, see https://github.com/zhengxwen/SeqArray/issues/48) o the bgzf VCF file is truncated in `seqGDS2VCF()` since the file is not closed appropriately o invalid chromosomes and position in the output of `seqMerge()` when merging different samples but same variants CHANGES IN VERSION 1.22.3 ------------------------- NEW FEATURES o a new option 'scenario' in `seqVCF2GDS()` and `seqBCF2GDS()` UTILITIES o more information in `seqDelete()` BUG FIXES o export a haploid VCF file using `seqGDS2VCF()` o export VCF without any FORMAT data in `seqGDS2VCF()` o export GDS without genotypes in `seqExport()` o fix parallel file writing in seqVCF2GDS(), when no genotype CHANGES IN VERSION 1.22.0 ------------------------- NEW FEATURES o `seqSNP2GDS()` imports dosage GDS files o `seqVCF_Header()` allows a BCF file as an input o a new function `seqRecompress()` o a new function `seqCheck()` for checking the data integrity of a SeqArray GDS file o `seqGDS2SNP()` exports dosage GDS files UTILITIES o avoid duplicated meta-information lines in `seqVCF2GDS()` and `seqVCF_Header()` o require >= R_v3.5.0, since reading from connections in text mode is buffered o `seqDigest()` requires the digest package o optimization in reading genotypes from a subset of samples (according to gdsfmt_1.17.5) BUG FIXES o `seqVCF2GDS()` and `seqVCF_Header()` are able to import site-only VCF files (i.e., VCF with no sample) o fix `seqVCF2GDS()` and `seqBCF2GDS()` since reading from connections in text mode is buffered in R >= v3.5.0 CHANGES IN VERSION 1.20.1 ------------------------- BUG FIXES o `seqExport()` fails to export haploid data (e.g., Y chromosome) o `seqVCF2GDS()` fails to convert INFO variables when Number="R" CHANGES IN VERSION 1.20.0 ------------------------- NEW FEATURES o `seqGDS2VCF()` outputs a bgzip vcf file for tabix indexing o two more options "Ultra" and "UltraMax" in `seqStorageOption()` o '@chrom_rle_val' and '@chrom_rle_len' are added to a GDS file for faster chromosome indexing o new function `seqBCF2GDS()` (requiring the software bcftools) o new function `seqSetFilterPos()` o new variable "$dosage_alt" in `seqGetData()` and `seqApply()` o import VCF files with no GT in `seqVCF2GDS()` UTILITIES o `seqDigest(f, "annotation/filter")` works on a factor variable o improve the computational efficiency of `seqMerge()` to avoid genotype recompression by padding the 2-bit genotype array in bytes o significantly improve `seqBlockApply()` (its speed is close to `seqApply()`) o reduce the overhead in `seqSetFilter(, variant.sel=...)` CHANGES IN VERSION 1.18.2 ------------------------- BUG FIXES o fix an issue: `seqSetFilterChrom()` extends a genomic range upstream and downstream 1bp o use `.onLoad()` instead of `.onAttach()` to fix https://support.bioconductor.org/p/104405/#104443 CHANGES IN VERSION 1.18.0 ------------------------- NEW FEATURES o progress information: showing overall running time when completed o new variable names "$ref" and "$alt" can be used in `seqGetData()` and `seqBlockApply()` o new argument '.progress' in `seqDigest()` o new argument 'ref.allele' in `seqAlleleCount()` o new variable name "$chrom_pos_allele" can be used in `seqGetData()` and `seqBlockApply()` UTILITIES o move VariantAnnotation to the suggest field from the import field o remove an unused argument '.list_dup' in `seqBlockApply()` o slightly improve the computational efficiency of `seqAlleleFreq()` and `seqAlleleCount()` when 'ref.allele=0' o `seqGetData(f, "$chrom_pos")` outputs characters with the format 'chromosome:position' instead of 'chromosome_position' BUG FIXES o fix the unexpected behaviors in `seqSetFilter(, action="push")` and `seqSetFilter(, action="push+intersect")` o fix a bug in `seqGetData(f, "$dosage")` when the number of unique alleles at a site greater than 3 (https://github.com/zhengxwen/SeqArray/issues/21) o fix a bug in `seqSNP2GDS()` for inverted genotypes during importing data from SNP GDS files (https://github.com/zhengxwen/SeqArray/issues/22) o fix an issue of no phase data in `seqExport()` CHANGES IN VERSION 1.16.0 ------------------------- o a new argument 'intersect' in `seqSetFilter()` and `seqSetFilterChrom()` o a new function `seqSetFilterCond()` o `seqVCF2GDS()` allows arbitrary numbers of different alleles if REF and ALT in VCF are missing o optimize internal indexing for FORMAT annotations to avoid reloading the indexing from the GDS file o a new CITATION file o 'LZMA_RA' is the default compression method in `seqBED2GDS()` and `seqSNP2GDS()` o `seqVCF_Header()` correctly calculates ploidy with missing genotypes CHANGES IN VERSION 1.14.1 ------------------------- o The default compression setting in `seqVCF2GDS()` and `seqMerge()` is changed from "ZIP_RA" to "LZMA_RA" o `seqVCF2GDS()`: variable-length encoding method is used to store integers in the FORMAT field of VCF files to reduce the file size and compression time CHANGES IN VERSION 1.12.9 ------------------------- o the version number was bumped for the Bioconductor release version 3.3 o `seqVCF_SampID()`, `seqVCF_Header()` and `seqVCF2GDS()` allow a connection object instead of a file name o "$num_allele" is allowed in `seqGetData()` and `seqApply()` (the numbers of distinct alleles) o a new option '.progress' in `seqAlleleFreq()`, `seqMissing()` and `seqAlleleCount()` o 'as.is' can be a `gdsn.class` object in `seqApply()` o v1.12.7: a new argument 'parallel' in `seqApply()`, BiocParallel integration in `seqParallel()` and a new function `seqBlockApply()` o v1.12.8: a new function `seqGetParallel()` CHANGES IN VERSION 1.12.0 ------------------------- o utilizes the official C API `R_GetConnection()` to accelerate text import and export, requiring R (>=v3.3.0); alternative version (backward compatible with R_v2.15.0) is also available on github (https://github.com/zhengxwen/SeqArray/releases/tag/v1.11.18) o ~4x speedup in the sequential version of `seqVCF2GDS()`, and `seqVCF2GDS()` can run in parallel o variables in "annotation/format/" should be two-dimensional as what mentioned in the vignette. o rewrite `seqSummary()` o a new vignette file with Rmarkdown format (replacing SeqArray-JSM2013.pdf) o bug fix in `seqBED2GDS()` if the total number of genotypes > 2^31 (integer overflow) o bug fixes in `seqMerge()` if chromosome and positions are not unique o `seqStorage.Option()` is renamed to `seqStorageOption()` o new function `seqDigest()` o `seqVCF.Header()` is renamed to `seqVCF_Header()`, `seqVCF.SampID()` is renamed to `seqVCF_SampID()` o seqSetFilter(): 'samp.sel' is deprecated since v1.11.12, please use 'sample.sel' instead o accelerate reading genotypes with SSE2(+13%) and AVX2(+23%) o new function `seqSystem()` o allow "$dosage" in `seqGetData()` and `seqApply()` for the dosages of reference allele o accelerate `seqSetFilterChrom()` and allow a selection with multiple regions o new methods `\S4method{seqSetFilter}{SeqVarGDSClass, GRanges}()` and `\S4method{seqSetFilter}{SeqVarGDSClass, GRangesList}()` o 'as.is' in `seqApply()` allows a 'connection' object (created by file, gzfile, etc) o `seqSummary(f, "genotype")$seldim` returns a vector with 3 integers (ploidy, # of selected samples, # of selected variants) instead of 2 integers CHANGES IN VERSION 1.10.6 ------------------------- o fix a memory issue in `seqAlleleFreq()` when 'ref.allele' is a vector o `seqSetFilter()` allows numeric vectors in 'samp.sel' and 'variant.sel' o `seqSummary()` returns ploidy and reference o `seqStorage.Option()` controls the compression level of FORMAT/DATA o `seqVCF2GDS()` allows extract part of VCF files via 'start' and 'count' o `seqMerge()` combines multiple GDS files with the same samples o export methods for compatibility with VariantAnnotation o a new argument '.useraw' in `seqGetFilter()` o a new argument 'allow.duplicate' in `seqOpen()` o fix a bug in `seqParallel()` (https://github.com/zhengxwen/SeqArray/issues/11) and optimize its performance o 'gdsfile' could be NULL in `seqParallel()` CHANGES IN VERSION 1.10.0 ------------------------- o a new function `seqGDS2SNP()` o supported by the SNPRelate package o support `seqApply(..., margin="by.sample")` o new functions `seqOptimize()`, `seqMissing()`, `seqAlleleFreq()`, `seqNumAllele()` and `seqSetFilterChrom()` o "intersection" and "push+intersection" in `seqSetFilter()` o parallel implementation in `seqNumAllele()`, `seqMissing()` and `seqAlleleFreq()` o a new function `seqExport()` o new argument ".useraw" in `seqApply()` o fix a bug for duplicated "variant.id", https://github.com/zhengxwen/SeqArray/issues/7 o fix an issue of `seqVCF2GDS()` when there are duplicated format or info ID o improve access speed (+50%, benchmark on calling seqApply(..., FUN=function(x) {})) o new functions `seqSNP2GDS()`, `seqBED2GDS()`, `seqAlleleCount()` and `seqResetFilter()` o `seqCompress.Option()` is renamed to `seqStorage.Option()` o "ZIP_RA" is the default value in `seqStorageOption()` and other functions instead of "ZIP_RA.max" o `seqSetFilter()` becomes a S4 method CHANGES IN VERSION 1.8.0 ------------------------- o bug fix in getting genotypes if position > 2^31 o add an option 'ignore.chr.prefix' to the function `seqVCF2GDS()` o `seqVCF2GDS()` ignores the INFO or FORMAT variables if they are not defined ahead o a new action 'push+set' in the function `seqSetFilter()` o bug fix if 'requireNamespace("SeqArray")' is called from other packages CHANGES IN VERSION 1.6.0 ------------------------- o fix a bug in `seqVCF2GDS()` when the values in the FILTER column are all missing o enhance `seqVCF.Header()` o support the LinkingTo mechanism o fix the error in haploid genotypes (Y chromosome) CHANGES IN VERSION 1.4.0 ------------------------- o update according to the new version of VariantAnnotation o update test codes to avoid the conflict o bumped version as all packages that depend on Rcpp must be rebuilt o modify to new biocViews to DESCRIPTION file CHANGES IN VERSION 1.2.0 ------------------------- o add a new argument "action" to the function `seqSetFilter()` o add a new function 'seqInfoNewVar' which allows adding new variables to the INFO fields o minor bug fix in asVCF o update man page "SeqVarGDSClass-class.Rd" with new methods o in DESCRIPTION, BiocGenerics listed in "Suggests" instead of "Imports" as suggested by R CMD check o bug fix in seqDelete o revise the function 'seqTranspose' according to the update of gdsfmt (v1.0.0) o revise the argument 'var.index' in the function `seqApply()` o basic supports of 'GRanges' and 'DNAStringSetList' o added methods 'qual', 'filt', 'asVCF' o 'granges' method uses length of reference allele to set width o minor bug fix to avoid `seqGetData()` crashing when no value returned from a variable-length variable o update documents CHANGES IN VERSION 1.0.0 ------------------------- o the version number was bumped for the Bioconductor release version CHANGES IN VERSION 0.99.0 ------------------------- o initial Bioconductor package submission