NEWS
universalmotif 1.32.0
NEW FEATURES
- Added CWM (Contribution Weight Matrix) motifs for signed,
unnormalised scores from TF-MoDISco / DeepLIFT-style attribution
methods. Create with type = "CWM" and plot with use.type = "CWM".
convert_type(cwm, "PPM") normalises absolute contributions per
column, enabling downstream analyses; conversion from probabilistic
types to CWM is not supported. MEME readers/writers accept
CWM = TRUE, and generic matrix readers/writers accept type = "CWM".
CWM input is opt-in, not auto-detected. See ?create_motif and
?convert_type.
- Added trim_cwm(), a CWM-aware trimmer that drops edge
columns by absolute column sum. Defaults to the
TF-MoDISco-lite fraction-of-peak rule (‘trim.threshold =
0.3'); an optional 'abs.threshold' argument switches to an
absolute-value cutoff. Walks inward from the chosen edges
only ('trim.from = c("both", "left", "right")'),
mirroring 'trim_motifs()'’s edge-only semantics. Returns a
trimmed CWM with the type tag preserved.
- Added compare_motifs_lite(), a DNA/RNA motif comparison function
aligned with yamtk cmp (https://github.com/bjmt/yamtk). Uses
per-column Pearson correlation and a TOMTOM-style empirical or
parametric null, with Bonferroni and Benjamini-Hochberg adjustment.
Returns a score/p-value/q-value matrix or a table of significant
pairs. Score-only comparisons were ~40x faster than compare_motifs()
on a 200x200 motif set at 4 threads. See ?compare_motifs_lite.
- Added scan_sequences_lite(), a minimalist DNA/RNA scanner using
the same C++ core as scan_sequences(). It omits multifreq scoring,
gapped motifs, q-values, exhaustive p-values, non-pvalue thresholds,
respect.strand, and allow.nonfinite. On a 50-motif HOCOMOCOv11
benchmark it was ~2-3x faster than scan_sequences(calc.pvals = TRUE)
at 4 threads on equivalent work. See the Sequence Searches vignette
for benchmarks, including comparisons with yamtk scan.
- Added view_motifs_lite() and motif_tree_lite(), DNA/RNA plotting
alternatives using compare_motifs_lite(). Logos align to the
highest-IC motif; trees use Pearson distances, (1 - score) / 2.
Both reuse the existing plotting machinery. For amino-acid or
custom-alphabet motifs, use view_motifs() and motif_tree().
- Added geom_motif(), annotate_motif(), geom_logo(), and
annotate_logo(): ggplot2 layers that embed sequence logos into
arbitrary plots. The annotate_*() helpers use fixed coordinates;
geom_*() layers support mapped positions and different motifs per
group. The *_motif variants accept universalmotif objects, while
*_logo accepts row-named numeric matrices. Letter colours do not
affect the plot's fill scale. See ?geom_motif.
- motif_tree_lite() now draws a sequence logo at each tip by default
(tiplogo = TRUE), with aligned motif positions. The default layout
changes from "circular" to "rectangular". Tip logos support only
"rectangular" and "slanted" layouts and are unavailable for dist
input. See ?motif_tree_lite for alignment and sizing options.
- New vignette "MotifDatabaseCuration.Rmd": end-to-end recipe for
consolidating motif sets from several public sources into a
single deduplicated, trimmed, and annotated MEME file. Uses human
JASPAR2022, HOCOMOCOv11-core, and CIS-BP motifs to demonstrate
threshold selection, clustering, provenance tracking, and export
verification.
- New vignette "ChIPseqWorkflow.Rmd": an end-to-end ChIP-seq motif
analysis on real data, starting from a peak BED file bundled in
inst/extdata (VAL1-GFP peaks in Arabidopsis from Yuan et al.
2021, NAR 49:98-113). Covers discovery, deduplication, database
comparison, enrichment, scanning, positional bias, and co-occurrence.
New Suggests dependencies: rtracklayer, BSgenome.Athaliana.TAIR.TAIR9.
- view_motifs() gains a 'sort.by' argument controlling the display
order: "none" (default; input order), "ic" (descending information
content), or "similarity" (Pearson-based hierarchical clustering).
Alignment always uses the highest-IC anchor, regardless of display
order.
- Added motif_coocc(), testing pairwise per-sequence co-occurrence
with one-sided Fisher's exact tests and BH correction. Scans DNA/RNA
internally or accepts precomputed hits plus n.sequences for any
alphabet. max.distance adds descriptive spatial summaries without
changing the test. Optional no.overlaps removes within-motif
overlaps during scanning, affecting only spatial summaries and
preserving between-motif overlaps. See ?motif_coocc.
- Added implant_motifs(), planting sampled motif instances at known
positions for testing analysis pipelines. Supports fixed counts
per sequence, a per-bp Poisson rate, or explicit positions, with
controls for central bias, spacing, and strand. return.indices = TRUE
includes placement metadata alongside the modified sequences.
See ?implant_motifs.
- Added match_bkg() and plot_match_bkg(): composition-matched
background sampling for DNA/RNA motif enrichment and de novo
discovery analyses. Samples from an XStringSet universe or BSgenome
to match target GC fraction and length, with plots for match-quality
assessment. Optional per-sequence covariates allow matching on
additional properties such as conservation or mappability; these
require an explicit universe and cannot be combined with genome.
return.indices = TRUE includes matched covariates for plotting via
plot_match_bkg(indices = ...). See ?match_bkg.
- Rewrote motif_peaks() as an analytical CentriMo-style positional
enrichment function (Bailey & Machanick 2012), accepting scan hit
tables as data.frame or GRanges. Tests central (default) or local
windows with one-sided binomial tests, Bonferroni correction across
windows, and BH correction across motifs. Added plot_motif_peaks()
to show hit distributions and the best window per motif.
See ?motif_peaks.
- Added merge_motifs_lite() and merge_similar_lite(), minimalist DNA/RNA
counterparts to merge_motifs() and merge_similar() built on
compare_motifs_lite(). Merging aligns to the highest-IC motif and
averages columns, optionally weighted by nsites. Clustering uses
connected components of pairs passing a q-value cutoff, then merges
each cluster. return.clusters = TRUE returns the original motifs
and cluster assignments instead. See ?merge_motifs_lite and
?merge_similar_lite.
- Added motif_finder(), a DNA/RNA _de novo_ motif discovery function
aligned with the command-line tool yamtk me
(https://github.com/bjmt/yamtk), whose design is based on STREME
(Bailey 2021). Combines enriched k-mer seeds, iterative refinement,
Fisher tests against shuffled or supplied backgrounds, deduplication,
BH filtering, and IC trimming. Runs motif widths in parallel and
returns a universalmotif_df with discovery statistics. Replaces the
previous unexported stub. See ?motif_finder.
- Added enrich_motifs_lite(), a minimalist DNA/RNA motif-enrichment
function aligned with the command-line tool yamtk enr
(https://github.com/bjmt/yamtk). Uses scan_sequences_lite(), Fisher
tests on sequence presence or per-position hit rates, and BH
adjustment. Returns a data.frame of counts, enrichment, and p/q-values,
controlled by a hit p-value and result q-value cutoff.
See ?enrich_motifs_lite.
- Added dedup_hits(), a fast C++ implementation of yamtk's greedy
overlap-dedup algorithm. Accepts data.frame or GRanges input;
auto-detects pvalue-vs-score priority direction. Used internally
by scan_sequences_lite(no.overlaps = TRUE) and available for
post-processing of any hit set. Distinct from scan_sequences()'s
existing no.overlaps argument, which uses connected-components
clustering and is left unchanged.
- Added plot_comparison(), a clustered heatmap of compare_motifs_lite()
results with dendrograms, logos and an optional tree cut.
- Added plot_hits(), plot_enrichment(), plot_coocc() and
plot_score_distribution() for scan, enrichment, co-occurrence and
score distribution results.
MINOR CHANGES
- ggplot2 >= 4.0.0 is now required.
- merge_motifs() and merge_similar() now emit one-line hints
pointing at merge_motifs_lite() / merge_similar_lite() when the user's
argument set maps cleanly onto the leaner functions. Silence with
options(universalmotif.suggest.merge_motifs_lite = FALSE) and
options(universalmotif.suggest.merge_similar_lite = FALSE).
- enrich_motifs() now emits a one-line hint pointing at
enrich_motifs_lite() when the user's argument set maps cleanly onto
the leaner function. Silence with
options(universalmotif.suggest.enrich_motifs_lite = FALSE).
- compare_motifs() now emits a one-line hint pointing at
compare_motifs_lite() when the user's argument set maps cleanly onto
the leaner function. Silence with
options(universalmotif.suggest.compare_motifs_lite = FALSE).
- motif_pvalue(method = "dynamic") now batches across motifs in a
single C++ call parallelised with RcppThread, instead of
dispatching one C++ call per motif via mapply. Identical numerical
output; 2.3x faster at nthreads = 1 and 7.4x faster at nthreads =
4 on a 50-motif HOCOMOCO benchmark. scan_sequences(calc.pvals =
TRUE) and scan_sequences_lite() both benefit automatically.
- scan_sequences() now emits a one-line hint pointing at
scan_sequences_lite() when the user's argument set maps cleanly onto
the leaner function. Silence with
options(universalmotif.suggest.scan_sequences_lite = FALSE).
- motif_tree() now emits a one-line hint pointing at motif_tree_lite()
when the user's argument set maps cleanly onto the leaner
function. Silence with
options(universalmotif.suggest.motif_tree_lite = FALSE).
- Reduced repeated power calculations in the C++ backends for
shuffle_sequences(), get_bkg(), create_sequences(), and
compare_motifs(). Results are numerically identical, with roughly
10-20% speed-ups in informal benchmarks.
- motif_pvalue(method = "exhaustive") now stops with a clear error
when a motif is too wide for exhaustive score enumeration (the
nrow^width path would overflow a 32-bit integer).
- Various textual improvements to the vignettes.
BUG FIXES
- scan_sequences() gives every motif its own P-values when gapped
motifs are scanned with others.
- mask_ranges() stops with an error for ranges on sequences not in
'seqs' instead of ignoring them.
- get_matches() no longer returns words scoring just below the score,
and works for single-column motifs.
- score_match() gives the same scores as scanning.
- normalize() gives PCMs without a pseudocount a pseudocount of 1, so
scanning them no longer gives hits almost everywhere.
- An ICM column of zeros converts to a uniform column rather than NaN.
- create_motif(bkg = NULL) uses the default background.
- read_transfac() keeps counts from a single site.
- Negative letters in sorted logos mirror the positive ones.
- motif_rc() keeps gaps and no longer fails for motifs with
higher-order matrices, which are now reverse complemented correctly.
- trim_motifs() and trim_cwm() move gaps with the trimmed columns, and
trim_motifs() no longer fills in an empty nsites slot.
- create_motif() accepts one-column matrices with row names, rejects
letters outside a custom alphabet, and only reads 20-row matrices as
amino acids when the row names are amino acids.
- Validation now checks single gaps, gap sizes, NaN values and
negative pseudocounts.
- PPM to PCM conversion no longer gives uneven or negative counts when
rounding overshoots.
- round_motif(), normalize() and convert_type() with a new pseudocount
update the total IC and consensus.
- Relative entropy is 0 rather than NaN for letters with probability 0.
- motif_range(allow.nonfinite = TRUE) no longer returns NA, and
log_string_pval() works for values below 1e-308 on all platforms.
- read_transfac() skips header blocks, keeps whole HC and OS fields,
names motifs by accession whatever the field order, and follows the
letter order of the P0 line.
- read_cisbp() keeps whole TF Name, Family and Species fields.
- read_jaspar() follows row labels, reads custom alphabets from them
and reads unlabelled 20-row matrices as amino acids.
- read_homer() keeps spaces in names from tab-separated headers.
- read_meme() matches custom alphabet backgrounds by letter, reads
sites at positions of 10,000 or more and joins block diagrams over
any number of lines.
- write_meme() no longer writes E= 0 for motifs without an E-value or
leaves trailing spaces, and meme_alph() declares each complementary
pair once.
- Matrices of probabilities rounded to two decimals are read as PPMs
rather than ICMs.
- Logos draw negative letters smaller than 0.03, with the same gaps
between them as positive letters, keep their top y-axis break, and
give CWMs round breaks without excess space below zero.
- motif_tree_lite() tip logos no longer fail for motifs sharing a name.
- shuffle_sequences(method = "markov") and create_sequences() with
k-mer frequencies now condition each letter on the letters just
generated.
- get_bkg() skips k-mers with letters outside the alphabet, which
could be miscounted or crash R for long k-mers, and writes MEME
background files without trailing spaces.
- Wootton-Federhen complexity no longer gives NaN for windows of 171
letters or more.
- calc_windows(return.incomp = FALSE) keeps a complete last window, and
mask_ranges() works with one range per sequence or none.
- motif_finder() ranks seeds with tied P-values by k-mer, so results no
longer depend on the standard library.
- compare_motifs_lite() breaks tied alignments by overlap length and
then order instead of rounding, writes RNA consensus strings with U
using the motif consensus rule, and no longer gives P-values of
exactly 0 under the parametric null.
- compare_motifs() and compare_columns() normalize WPCC weights, and
KL and ALLR no longer give NaN for letters with probability 0.
- scan_sequences() scans gapped motifs on both strands, with gaps that
can have size zero and after ungapped motifs, and sequences shorter
than a motif give no hits for it in both scanners instead of an
error.
- write_homer() writes thresholds on HOMER's own score scale instead
of log2 odds, which made them about 44% too high.
- motif_coocc() odds ratios no longer overflow to NA for large tables.
- match_bkg(genome = ...) keeps the width of a single target sequence
instead of drawing random widths.
- motif_peaks() numbers motifs by code point rather than locale, and
motif_proximity() keeps the motif.i from scan_sequences().
- motif_finder() corrects each motif's P-value for the words tried in
its search and counts every word tried in the q-values, so random
sequences no longer give significant motifs. The default 'qvalue'
cutoff is now 0.05.
- motif_proximity() places hits at their middle positions, which
stops wide hits being reported as enriched near random anchors, and
clips anchor zones at chromosome ends.
- motif_coocc(self.pairs = TRUE) no longer tests a motif against
itself; self-pairs count sequences with hits at two or more distinct
positions.
- create_motif() warns when a matrix with negative values is converted
to a PPM because no type was given.
- CWMs have no total IC, which is computed when they are converted to
another type.
- calc_complexity() scores DNA and RNA against ACGT or ACGU by default,
as sequence_complexity() does, rather than each string's own letters.
- get_matches() now returns no matches for an Inf threshold from an
unattainable motif_pvalue() cutoff, fixing an error in the examples.
- Native motif files now retain gap definitions, including in minimal
output. Fixed the constructor confusing gap positions with minimum
gap widths and gap expansion passing probabilities to the scanner
instead of PWM scores. External exports warn when gaps or higher-order
matrices cannot be preserved.
- create_motif() now accepts NA site counts as unknown and rejects
non-finite or fractional counts clearly.
- Fixed dynamic P-value thresholds admitting hits above the requested
cutoff in scan_sequences() and scan_sequences_lite(). Thresholds
now respect inclusive comparisons, and unattainable cutoffs return
no hits instead of admitting the highest-scoring matches. Some
scans and downstream analyses will therefore report fewer hits.
- Fixed decimal score thresholds rounding down during conversion to
the integer score grid. Dynamic P-value queries now use the same
inclusive boundary convention. Documented the distinction between
integerised and original real-valued score distributions.
- Dynamic motif_pvalue() now preserves supplied finite PWMs when the
background is unchanged, avoiding conversion round-trips that could
shift entries across integer-score boundaries.
- Fixed scan_sequences() reporting truncated stop coordinates and
matched sequences for higher-order motifs (use.freq > 1). Hits and
the short-sequence check now use the full nucleotide span.
- Fixed scan_sequences(), view_motifs(), and view_motifs_lite()
accepting motif lists in which only some motifs contained the
requested multifreq matrix. Every motif is now checked before
scanning or plotting.
- Fixed motif_pvalue() rejecting use.freq > 3 when method was omitted.
The default dynamic method is now resolved before validation.
- Fixed shuffle_sequences() accepting the unsupported method =
"random". It now reports the supported methods in a clear error.
- Fixed get_consensus() and get_consensusAA() crashing R on invalid
input. Both now require a single numeric motif column of the
expected length (4 for DNA/RNA, 20 for amino acids) and raise a
clear error otherwise.
- Fixed overlapping letters in view_motifs() when three or more
letters at a position had negative heights. Stacking now uses
cumulative offsets; one- and two-letter stacks are unaffected.
- Fixed view_motifs() / view_logo() inverting small letters when
y.spacer exceeded their height. Spacing is now capped at half the
letter height. Also affects geom_motif() / geom_logo(), which
share the renderer.
- Fixed create_motif() ignoring an explicit DNA/RNA/AA alphabet when
the input matrix had rownames. This left the consensus and motif
column names unset and broke to_list() / update_motifs() round-trips.
- Fixed nthreads = 0 silently running serially instead of using all
available threads as documented (RcppThread::parallelFor treats 0
as "no workers" rather than "all hardware threads"). Affected
scan_sequences(), shuffle_sequences(), compare_motifs(),
motif_pvalue(), motif_tree(), create_sequences(), get_bkg(),
enrich_motifs(), make_DBscores(), sequence_complexity(), and
window_string().
- Fixed convert_motifs(motifs, class = "TFBSTools-PFMatrixList") (and
the PWMatrixList / ICMatrixList variants) erroring with "unknown
'class'". These documented output classes now return the
corresponding TFBSTools list objects.
- Fixed compare_motifs() using the first motif's background for both
motifs when nthreads > 1. Each motif's own background is now used.
- Fixed unsafe parallel calls to R's probability functions in
compare_motifs(), which could corrupt state under load. P-value
evaluation now runs serially; the lookup search remains parallel.
- Fixed compare_motifs() row-not-found path in the db.scores lookup
infinite-looping when n1 / n2 ran past the table without finding a
matching row.
- Fixed shuffle_sequences() crashing R when k was larger than the
shortest input sequence. The C++ backends now refuse the call with
a clear "'k' must be <= the shortest sequence length" error.
- Fixed read_homer() storing NA in the nsites and bkgsites slots when
those header fields were missing. ifelse(is.na(...), numeric(0), x)
cannot return numeric(0); replaced with explicit if/else so missing
fields parse to an empty vector as documented.
- Fixed read_jaspar(), read_cisbp(), read_meme(), and read_transfac()
silently returning an empty list when the input file had no
motif headers / separators. All four now error with
"no motifs found in 'file'".
- Fixed read_jaspar() producing an nsites slot of -Inf when a header
was followed by an empty matrix. The reader now errors with a
clear "empty motif matrix" message before the downstream
max(colSums(motif)) on numeric(0).
- Fixed convert_motifs() for motifStack 'pcm' inputs silently
picking unique(colSums(...))[1] as nsites when the column sums
disagreed. Now checks the column sums within tolerance and errors
with the observed range if they don't agree.
- The S4 validity method for PCM motifs now also checks that the
motif matrix's column sums are all equal (within the same 1%
tolerance the PPM validity check uses).
universalmotif 1.30.1
MINOR CHANGES
- Improved memory usage of scan_sequences() for larger motif collections &
genomes.
BUG FIXES
- Fixed filter_motifs() erroring when filtering by nsites (malformed apply()
call instead of vapply()).
- Fixed motif["name"] <- NA_character_ (and other atomic slots) being silently
accepted instead of raising an error.
- Fixed to_list() writing literal "0" into the name slot when altname was NA
and a dplyr::rename() swap was performed on the data frame.
- Fixed new("universalmotif", altname = ...) silently dropping the altname
argument due to a missing assignment operator.
- Fixed motif_score() erroring with allow.nonfinite = TRUE and the default
threshold.type = "total".
- Fixed motif_pvalue() rejecting non-finite scores even when allow.nonfinite =
TRUE was specified (sanitize_input() was not checking the flag).
- Fixed shuffle_motifs() silently resetting the pseudocount to 1 and the type
to PPM regardless of the input motif's values.
- Fixed shuffle_sequences() and get_bkg() not guarding against window.size <
k, or fractional window.size values that resolve to 0 after expansion.
- Fixed enrich_motifs() crashing inside fisher.test() when input sequences are
shorter than the widest motif. Now gives a clear error message.
- Fixed read_jaspar() leaving the nsites slot empty for PCM motifs; it is now
derived from the column sums of the count matrix.
- Fixed an unsigned-integer underflow in src/scan_sequences.cpp that could
cause out-of-bounds reads when scanning sequences shorter than motif width + k.
- Fixed a signed-integer overflow in scan_sequences_cpp() when the threshold
supplied via threshold.type = "logodds.abs" exceeded ~2e6; on x86_64 the
overflow wrapped to INT_MIN, causing all positions to be returned regardless
of the threshold.
- Fixed the shuffle.method error message in enrich_motifs() which listed
"random" instead of "euler" as a valid option.
- Fixed a wrong variable name (seq.names instead of bkg.names) in the fallback
for unnamed background sequences in enrich_motifs().
- Fixed a wrong assignment operator (= instead of ==) in the
motif_pvalue.method compatibility check in scan_sequences() which was
silently clobbering the calc.pvals variable.
- Fixed scan_sequences() BH q-value calculation; previously used an inverted
ratio with an erroneous 100x factor instead of the standard BH formula.
- Fixed a wrong inner-loop index in motif_pvalue(method="exhaustive") that
produced incorrect p-values for motifs wider than 2*k.
- Fixed get_matches() failing when passed a length-1 list of motifs due to an
undefined variable and the list-unwrapping occurring after the @ access.
- Fixed get_bkg() validation incorrectly rejecting multi-element window.overlap
when merge.res = FALSE, due to missing parentheses around an || sub-expression.
- Fixed merge_motifs() silently dropping the bkgsites slot when only one of the
merged motifs had it populated (threshold was > 1 instead of >= 1).
- Fixed get_matches() error message incorrectly referencing the max possible
score when reporting a min-score violation.
- Removed a dead NULL check in enrich_motifs() that would have errored
(nrow(NULL) < 1 yields logical(0)) had it ever been reached.
- Removed a leftover debug print() call in enrich_motifs() input validation that
caused error messages to be printed twice.
- Fixed scan_sequences(return.granges = TRUE) failing when sequences is empty,
due to 1:length(sequences) producing c(1, 0) for length-0 input.
- Fixed shuffle_sequences() producing identical shuffles across parallel threads
when rng.seed = 0.
- Fixed score_match(allow.nonfinite = TRUE) returning NA instead of -Inf for
match positions that correspond to non-finite motif cells.
- Fixed read_motifs() failing with 'object motif not found' when reading a
saved motif file containing a multifreq block, because the motif object was
used before it was constructed.
- Fixed convert_motifs() Motif-method (motifRG) passing the PCM matrix as a
positional argument due to a stray <- instead of = in the argument list.
- Fixed possible undefined behaviour in scan_sequences() when scanning
sequences shorter than k with a multifreq motif (size_t underflow in
deal_with_higher_k / deal_with_higher_k_NA).
- Fixed merge_motifs() populating pval, qval, eval, nsites, and pseudocount
slots with NA when all input motifs had those slots empty; they are now
correctly left empty.
- Fixed trim_motifs() discarding all successfully-trimmed motifs when any
single input motif was fully trimmed away (partial-trim case now correctly
returns only the surviving motifs).
- Fixed read_motifs() using lexicographic string comparison for version
dispatch; 1.1.7 was incorrectly treated as older than 1.1.67. Now uses
numeric_version().
- Fixed read_cisbp() off-by-one error when CIS-BP files contain consecutive
TF metadata lines, caused by mutating meta_starts during seq_along iteration.
- Fixed a temp-file leak in the compare_motifs() HTML report path where the
second on.exit() call overwrote the first (now uses add = TRUE).
- Fixed add_multifreq() retry loop erroring with 'missing value where
TRUE/FALSE needed' or keeping the failing k value, due to a stale seq_along
and an off-by-one in seq_len(counter) vs seq_len(counter - 1).
- Fixed runtime error ('argument FUN.VALUE is missing') in read_motifs() when
reading pre-1.2.x files containing multifreq blocks.
- Fixed filter_motifs() erroring when filtering by pval, qval, eval, altname,
family, or organism and any motif had an empty slot for that field (sapply
returned a list of mixed lengths; now uses vapply).
- Fixed shuffle_motifs() dropping the matrix dimension when shuffling a
length-1 motif (missing drop = FALSE in column slice), causing downstream
errors.
- Fixed read_motifs() silently accepting non-logical values for the progress
and BP arguments (logi_check was computed but not appended to all_checks).
- File connections in all read_*() and write_*() functions are now closed via
on.exit() so they are released cleanly even when an error occurs mid-read.
universalmotif 1.30.0
BUG FIXES
- Fixed create_sequences() not properly validating alphabet and freq values
due to a floating point error with logb(). Thanks to @CountercurrentLinda
for the bug report (#32).
universalmotif 1.28.0
BUG FIXES
- Quiet a couple of warnings triggered during testing the universalmotif
initializer function. These warnings should never trigger in real-world
scenarios.
universalmotif 1.26.3
BUG FIXES
- Update a few lines in view_motfs() to stay up-to-date with ggplot2. Thanks
to Stevie Pederson for the fix (#31).
universalmotif 1.26.2
BUG FIXES
- Fixed a bug introduced by the last bug fix.
universalmotif 1.26.1
BUG FIXES
- Plotting logos with negative letter heights is now fixed.
universalmotif 1.24.2
BUG FIXES
- Incorrect version number in last NEWS update.
universalmotif 1.24.1
BUG FIXES
- Fixed another missed Rcpp bounds check warning.
universalmotif 1.22.3
BUG FIXES
- Fixed make_DBscores() crash.
universalmotif 1.22.2
universalmotif 1.22.1
BUG FIXES
- Always check object sizes before indexing in universalmotif_cpp().
Fixes build timeouts on Bioconductor.
universalmotif 1.22.0
BUG FIXES
- Address C++ compiler warnings.
- Suppress warnings when using as.data.frame() on DataFrame objects
in the SequenceSearches.Rmd vignette.
universalmotif 1.18.1
BUG FIXES
- Fixed compilation flags causing errors on linux.
universalmotif 1.18.0
NEW FEATURES
- read_meme(readsites.meta.tidy): New option to tidy the output of the
readsites.meta option into a single data.frame.
MINOR CHANGES
- create_motif(): More robust argument checking.
- The rowMeans, colMeans, rowSums, and colSums generics are now imported
from the MatrixGenerics package instead of BiocGenerics.
BUG FIXES
- Clean up output of argument checks internal to exported functions.
- Delete a reference in IntroductionToSequenceMotifs vignette to a
non-exported function.
- Delete outdated in MotifManipulation vignette regarding convert_motifs
function.
universalmotif 1.16.0
NEW FEATURES
- write_transfac(name.tag, altname.tag): New arguments to manually set the
name and altname tags in the final TRANSFAC motifs.
MINOR CHANGES
- write_matrix(positions): Partial argument matching allowed.
- motif_tree(): Silence messages from ggtree.
BUG FIXES
- create_motif(): Don't ignore the nsites argument when generating random
motifs.
- read_meme(): Correctly parse background if lines are prepended with a
space.
- convert_type(pseudocount): Change the pseudocount within the motif when
performing a type conversion and the option is set.
universalmotif 1.14.1
BUG FIXES
- read_meme(): Handle motif files with custom alphabets and no 'END'
line in alphabet definition. Thanks to @manoloff (#24) for the bug
report, and Sabrina Nystrom for the fix (#25).
universalmotif 1.14.0
NEW FEATURES
- enrich_motifs(mode, pseudocount): Choose whether to count motif hits
once per sequence, and whether to add a pseudocount for P-value
calculation.
- New function, meme_alph(): Create MEME custom alphabet definition files.
- merge_similar(return.clusters): Return the clusters without merging.
- convert_motifs(): MotifDb-MotifList now available as an output format.
MINOR CHANGES
- enrich_motifs(): RC argument now defaults to TRUE, increased max
significance values, no.overlaps now defaults to TRUE. Additional
columns showing the motif consensus sequence and percent of sequences
with hits are now included.
- scan_sequences(RC): Only print a warning if RC=TRUE for non-DNA/RNA
motifs.
- Reduced the size of the message when a pseudocount is added to motifs.
universalmotif 1.12.4
BUG FIXES
- convert_motifs(): Properly handle TFBSTools class motifs with '*' as
their strand. This was achieved by making the universalmotif object
creator tolerant to using '*' as a user input. Thanks to David Oliver
for the bug report (#22).
universalmotif 1.12.3
BUG FIXES
- scan_sequences(): Previously this function did not account for the fact
that duplicate sequence names are allowed within XStringSet objects. To
better keep track of which sequence hits are associated with, an
additional sequence.i column has been added which keeps track of the
sequence number. This change also fixes a knock-on issue with
enrich_motifs(), where sequences with duplicate names did not contribute
to the count of sequences containing hits. Thanks to Alexandre Blais for
mentioning this issue.
universalmotif 1.12.2
BUG FIXES
- shuffle_sequences(..., method="markov"): Previously the returning
sequences were longer by 1.
universalmotif 1.12.1
BUG FIXES
- DNA ambiguity letters can be used with create_motif() when
alphabet="DNA" is specified. Previously ambiguity letters only worked
when alphabet was not specified.
universalmotif 1.12.0
NEW FEATURES
- New function, sequence_complexity(): Using either the Wootton-Federhen,
Trifonov, or DUST algorithms, calculate sequence complexity in sliding
windows. A version for small arbitrary strings is also provided:
calc_complexity().
- New function, mask_ranges(): Similarly to mask_seqs(), mask specific
positions in a XStringSet object by replacing the letters with a specific
filler character.
- New function, motif_range(): Get the min/max range of possible logodds
scores for a motif.
- New function, calc_windows(): Utility function for calculating
coordinates for sliding windows.
- New function, window_string(): Utility function for retrieving sliding
windows in a string.
- New function, slide_fun(): Utility function which wraps window_string()
and vapply() together.
- motif_pvalue(method): P-values and scores can now be calculated
dynamically instead of exhaustively, substantially increasing both speed
and accuracy for bigger jobs. The previous exhaustive method can still be
used however, as the dynamic method does not allow non-finite values and
thus must be pseudocount-adjusted.
- scan_sequences(calc.pvals, calc.qvals, motif_pvalue.method,
calc.qvals.method): The calc.pvals argument defaults to TRUE.
The P-value calculation method now defaults to dynamic P-values (the
previous method was an exhaustive calculation), though this can be
changed via motif_pvalue.method. Additionally, adjusted P-values can be
calculated as either BH, FDR or a Bonferroni-adjusted P-value. More
details can be found in the Sequence Searches vignette.
- write_homer(threshold, threshold.type): Finer control over the final
motif logodds threshold included with the written motif is now
available, using the style of argument parsing from scan_sequences().
The previous logodds_threshold argument is now deprecated and set to
NULL, but if set (e.g. an older script is being re-run) then the old
behaviour of write_homer() will be used.
MINOR CHANGES
- New global option, options(pseudocount.warning): Disable the message
printed when a motif is pseudocount-adjusted.
- Slight performance gains in get_bkg() window code.
- motif_pvalue(): Clarify that, indeed, background probabilities are taken
into account when calculating P-values from score inputs. The background
adjustment takes place during the initial conversion to PWM.
- motif_pvalue(): When bkg.probs are provided, use those when converting to
a PWM.
- scan_sequences(): The default threshold is now 0.0001 (using
threshold.type = "pvalue").
- The axis text in view_motifs() is now black instead of grey.
- create_motif(): When a named background vector is provided, it is
sorted according to the alphabet characters.
- scan_sequences(): Check that the sequences aren't shorter than the
motifs.
- print.universalmotif_df: Changed warning message when subsetting to an
incomplete universalmotif_df object. Also added a way to turn off
informative messages/warnings via the boolean universalmotif_df.warning
global option.
- Miscellaneous changes and additions to the vignettes and various
function manual pages.
universalmotif 1.10.2
BUG FIXES
- read_homer() now correct parses enrichment P-value and logodds score.
universalmotif 1.10.1
BUG FIXES
- Restore temporarily disabled ggtree(layout="daylight") example in the
MotifComparisonAndPvalues.Rmd vignette, as tidytree is now patched.
- Fixed some awkwardness in view_motifs() panel spacing and title
justification.
universalmotif 1.10.0
NEW FEATURES
- A new data structure, universalmotif_df, has been made available. This
allows for motifs to be manipulated as one would a data.frame object.
The to_df() function is used to generate this stucture from lists of
motifs. The update_motifs() function is used to apply changes to the
actual motifs, and to_list() returns the actual motifs. Note that this is
only meant as an option for more conveniently manipulating motif slots of
multiple motifs simultaneously before returning them to a list; the
universalmotif_df structure cannot be used in the various universalmotif
functions. Additionally, requires_update() can be used to ascertain
whether motifs are out of date in a universalmotif_df object. Many thanks
to @snystrom for discussions and significant contributions.
- view_motifs(): the universalmotif package now relies entirely on its
own code to generate the polygon data used by ggplot2 to plot motifs,
meaning the ggseqlogo import has been dropped. A number of new options
are now available, including plotting multifreq logos and finer control
over letter spacing. An effort has been made to ensure that the default
behaviour of the function be unchanged from previous versions. This
change should also allow for easier fixing of bugs and flexibility for
future additions or changes.
- New function, merge_similar(): identify and merge similar motifs in a
list of motifs. Essentially, a wrapper around compare_motifs(), hclust(),
cutree(), and merge_motifs().
- New function, view_logo(): plot logos with matrix input instead of motif
object input. Arbitrary column heights and multi-character letters are
allowed.
- New function, average_ic(): calculate the average information content
for a list of motifs.
- trim_motifs(..., trim.from): trim from both directions or just one.
- shuffle_sequences(..., window, window.size, window.overlap): shuffle
sequences iteratively in windows of specified size.
- scan_sequences(..., return.granges): optionally return a GRanges object.
- scan_sequences(..., no.overlaps, no.overlaps.by.strand,
no.overlaps.strat): remove overlapping hits after scanning, preventing
overlapping hits by the same motifs from being returned. This can
optionally be done per strand. Either the first hit or the highest
scoring hit can be preserved per set of overlapping hits. These new
arguments can also be used in enrich_motifs().
- scan_sequences(..., respect.strand): whether to scan the sequence strands
according to the motif strand slot. Only applicable for DNA/RNA motifs.
This option is also available in enrich_motifs().
MINOR CHANGES
- Some additions and clean-up to documentation and vignettes.
- Support for MotIV-pwm2 formatted motifs has been dropped, as the package
is no longer a part of the current Bioconductor version.
- read_matrix()/write_matrix(): the sep argument can now be NULL (no
seperators.)
- The Rdpack dependency has been dropped.
- merge_motifs(): single-motif input now simply returns the motif instead
of throwing an error.
- view_motifs(..., dedup.names): now TRUE by default. Furthermore, the
make.unique() function is now used to deduplicate names.
- compare_motifs(..., method): the default comparison method has been
changed back to PCC.
BUG FIXES
- Using create_motif() with a single character no longer throws an error.
- Generating random motifs with filled multifreq slots now works.
universalmotif 1.8.5
BUG FIXES
- Found a typo in the consensus to PPM calculation for the DNA ambiguity
letter Y which resulted in incorrect PPM values.
universalmotif 1.8.4
BUG FIXES
- Fixed incorrect handling of the -alph parameter in run_meme() (reported
by @Irenexzwen).
universalmotif 1.8.3
BUG FIXES
- Fixed improper handling of MEME version string in read_meme().
universalmotif 1.8.2
BUG FIXES
- Increase compliance with MEME motif format: motif files with missing
alphabets/strand/bkg are now allowed and will be assumed to be
DNA/+/uniform frequencies. A check for the MEME version is performed,
though only a warning is given if not found.
- Fixed typo in run_meme() missing dependency error message.
universalmotif 1.8.1
BUG FIXES
- Fixed error when scan_sequences() is used with both RC = TRUE and
calc.pvals = TRUE.
- Fixed motif.i column in scan_sequences() results not reporting correctly
when RC = TRUE.
- Fixed memory access bug in motif_pvalue() when k was set to a value
resulting in three or more submotifs.
universalmotif 1.8.0
NEW FEATURES
- scan_sequences()/enrich_motifs() can now be used to scan/enrich for
gapped motifs. A new section has been added to the SequenceSearches.Rmd
vignette.
- scan_sequences(..., use.gaps), enrich_motifs(..., use.gaps): ignore motif
gap information.
- read_meme(), write_meme(): now fully support custom alphabets.
- prob_match(), prob_match_bkg(): calculate the probability of a motif
match based on background frequencies of the motif object or provided
values, respectively.
- enrich_motifs(), get_matches(), get_scores(), motif_pvalue(),
motif_score(), scan_sequences(), score_match(): new allow.nonfinite
parameter, allowing for the functions to work even if non-finite values
are present in the motif PWM.
- read_matrix(..., comment): allows for comments to be ignored in motif
files.
- write_matrix(..., digits): control the number of digits to use for
writing motif positions.
- New mask_seqs() utility function: inject hard masks into sequences.
- scan_sequences(..., warn.NA), enrich_motifs(..., warn.NA): new option
which can disable warnings from non-standard letters being detected
in the input sequences.
- get_bkg(..., window, window.size, window.overlap): new options for
calculating sequence background in windows.
- get_bkg(..., merge.res): new option to return background information for
individual sequences.
- scan_sequences(..., calc.pvals): new option to calculate P-values for
sequence hits. This is merely automating using the results from
scan_sequences() to calculate P-values manually with motif_pvalue().
- view_motifs(..., show.positions, show.positions.once, show.names): new
options for customizing the look of plotted motifs.
MINOR CHANGES
- read_matrix(..., positions): added partial argument matching.
- create_sequences(), shuffle_sequences(), motif_pvalue(): the c++ random
engine has been changed from std::default_random_engine to std::mt19937.
This should allow for the same rng.seed value to result in the same
output regardless of OS.
- score_match() has been vectorized (alongside new prob_match() function).
- The ape and ggtree packages are now no longer imported and must be
installed seperately in order to use motif_tree().
- The processx package is no longer imported and must be installed
seperately in order to use run_meme().
- The pseudocount slot is now shown when universalmotif class objects are
printed.
- get_bkg(): the list.out and as.prob options have been disabled. To
simplify the function, the only possible output (exception: if to.meme is
not NULL) is a DataFrame showing both counts and probabilities.
- Changed the default look of motifs plotted by view_motifs().
- General documentation cleanup.
BUG FIXES
- Changing motif backgrounds with '[<-' will now make sure to set correct
vector names.
- get_bkg() will now correctly ignore non-standard letters and letters
missing from the provided alphabet during counting.
universalmotif 1.6.4
BUG FIXES
- cbind(): do not ignore the pseudocount slot.
- Fixed typo in IntroductionToSequenceMotifs.Rmd.
- Fixed U() function in IntroductionToSequenceMotifs.Rmd, no longer returns
NA values if 0s are present.
- read_cisbp(): no parsing errors for motifs with missing/partial header
info.
universalmotif 1.6.3
BUG FIXES
- scan_sequences(): commented out WIP code for scanning gapped motifs.
universalmotif 1.6.2
BUG FIXES
- motif_tree(): 'daylight' layout is no longer disabled.
universalmotif 1.6.1
BUG FIXES
- summarise_motif(): properly retrieves altname slot. Contribution from
Sabrina Nystrom (https://github.com/bjmt/universalmotif/pull/9).
- read_meme(): for LIKE type alphabets, make sure PROTEIN-LIKE is
understood as being AA.
universalmotif 1.6.0
NEW FEATURES
- log_string_pval(): small utility function to obtain the log of
string-formatted p-values (such as those often carried in
MEME-formatted motifs which are smaller than R's double.xmin limit).
Likely only a temporary solution.
- view_motifs(..., return.raw) option: instead of returning a plot
type object, return the aligned motif matrices.
- view_motifs(..., dedup.names) option: allows plotting of motifs with
duplicated names by appending a unique string.
- merge_motifs(..., new.name) option: assign a name to the new merged motif
instead of collapsing the names of the merged motifs together.
- round_motif() utility: round down very low letter-position scores to
zero.
MINOR CHANGES
- Removed most previously deprecated function arguments.
- Make sure view_motifs(..., use.type = "ICM") properly sets ylim.
- create_motif(): single motif positions can now be created.
- create_motif(), character input: nsites slot is left empty is input is
a single string. It is still filled if the input consists of multiple
strings.
- merge_motifs(): ALLR/ALLR_LL/KL/IS methods no longer add pseudocounts to
the motifs. Instead, pseudocounts are added to temporary internal copies
which are used for comparison and alignment. The original un-modified
matrices are then combined.
- read_meme(): now supports DNA-LIKE, RNA-LIKE, and AA-LIKE alphabets,
though these will be treated as regular DNA, RNA, and AA alphabets,
respectively. Contribution from Sabrina Nystrom
(https://github.com/bjmt/universalmotif/pull/7).
- Some cleanup to documentation and vignettes.
- General code cleanup.
BUG FIXES
- write_meme() now includes altname slot if filled. Contribution from
Sabrina Nystrom (https://github.com/bjmt/universalmotif/pull/5).
- write_meme() checks for and removes any spaces/equal signs in motif
names/altnames.
- view_motifs(..., use.type = "ICM"): check for zero IC motifs, as these
cannot be plotted by ggseqlogo.
universalmotif 1.4.10
BUG FIXES
- Updated the warning from v1.4.9 to make users aware that the daylight
layout will be permanently disabled for Bioconductor 3.10.
universalmotif 1.4.9
BUG FIXES
- Temporarily disabling the 'daylight' layout for motif_tree() to get
around a new bug.
universalmotif 1.4.8
BUG FIXES
- Fixed buffer overflow error in motif_peaks().
universalmotif 1.4.7
BUG FIXES
- Fixed dangling references in compare_motifs_helper.cpp and
utils-exported.cpp.
- Trying to subset a motif to a single column no longer throws an error.
universalmotif 1.4.6
BUG FIXES
- scan_sequences(): will now actually emit a warning when non-standard
letters are detected.
universalmotif 1.4.5
BUG FIXES
- run_meme(): don't try and delete R's tempdir.
universalmotif 1.4.4
BUG FIXES
- Minor fix to how args are fed to processx::run() in run_meme().
universalmotif 1.4.3
BUG FIXES
- Suppress message output from library(TFBSTools) call in
MotifManipulation.pdf vignette preamble code.
universalmotif 1.4.2
BUG FIXES
- Stopped using BiocStyle, as a current bug was preventing the package from
building successfully.
universalmotif 1.4.1
BUG FIXES
- When using create_motif() with an AAStringSet object, amino acid letters
will now be properly sorted and match the motif rows.
universalmotif 1.4.0
NEW FEATURES
- scan_sequences(..., threshold.type) option: 'logodds.abs'. Allows
the exact threshold scores to be provided.
- compare_motifs() option: 'min.position.ic'. Prevent low-IC positions in
an alignment from contributing to the final alignment score.
- compare_motifs() option: 'score.strat'. Instruct the function how to deal
with individual column scores in an alignment. This is also replaced
the old way of choosing between sum and mean via prepending an 'M' to the
metric name. Strategies for combining column scores include: sum,
arithmetic mean, geometric mean, median, Fisher Z-transform, and weighted
means.
- Motif comparison metrics: average log-likelihood ratio, squared Euclidean
distance, Hellinger distance, Bhattacharyya coefficient, Manhattan
distance, lower limit average log-likelihood ratio, weighted Euclidean
distance, weighted Pearson correlation coefficient.
- compare_columns() utility: Compare two 1d numeric vectors using the
comparison metrics from compare_motifs().
- compare_motifs() option: 'output.report'. Generate an output report when
'compare.to' is provided, showing motif alignments of top matches.
- get_scores() utility: Extract all possible scores from a motif.
- filter_motifs(): Filter using the 'extrainfo' slot.
- MotifComparisonAndPvalues.pdf vignette: the comparisons and P-values
sections have been moved from AdvancedUsage.pdf to their own vignette.
Higher order motifs, enrichment and run_meme() usage sections have been
moved to SequenceSearches.pdf.
MINOR CHANGES
- Removed 'random' shuffling method.
- Using RcppThread instead of BiocParallel in several functions:
compare_motifs(), create_sequences(), get_bkg(), motif_pvalue(),
scan_sequences(), shuffle_sequences(). This means parallelization can
occur within C++ code which is much faster than having to jump between
R and C++. Currently motif_peaks(), read_motifs() and write_motifs()
are the only remaining functions which offer optional BiocParallel
usage.
- Many performance improvements to functions relying on internal C++ code.
Several internal R functions have been replaced with C++ versions.
- Changed behaviour of make_DBscores() and motif comparison P-values.
Re-calculated internal P-value databases.
- For merge_motifs(..., use.type): now only accepts 'PPM'.
- When comparing all motifs to all motifs with any method in
compare_motifs(), the diagonal entries now properly show the max/min
possible similarity/distance scores.
- New internal merge_motifs() implementation. This also fixes a previous bug
with incorrect PPM averaging.
- read_homer(): the logodds score is converted to a P-value.
- motif_pvalue(): New score calculator. Exact scores are still calculated
the same (but with a faster C++ function), but approximate scores are
now calculated by randomly generating score distributions from size 'k'
motif score blocks.
- motif_pvalue(): Added a safety check when trying to use this function
with large motifs. Will throw a warning when nrow(matrix)^k > 1e8 and
reduce k accordingly before continuing.
- Adjusted P-value calculation in motif_peaks() to not display Pval = 0
so easily by instead estimating a normal distribution from random peaks.
- convert_type(): make sure not to leave any zeros in bkg vector when a
pseudocount greater than zero is used.
- enrich_motifs(): split up 'hits' and 'positional' resuts into their own
data.frames.
- Replaced several instances of cat() with message() for printing progress
updates.
- Positional tests have been removed from enrich_motifs(). See
motif_peaks() for testing motif-sequence positional preferences.
- In read_meme(): E-values are now additionally stored in the extrainfo
slot. This is to preserve E-values smaller than the R double precision
limit.
- In read_transfac(): Matrix values are rounded, to prevent errors when
reading in matrices with non-integers.
- Update JASPAR2018_CORE_DBSCORES with new compare_motifs() methods and
params.
- universalmotif print() method now returns the object invisibly,
instead of NULL.
BUG FIXES
- read_meme() will now properly parse background letter frequencies which
span more than one line.
- convert_motifs() will not error-out when trying to convert a PFMatrix
with a family character vector longer than one.
- Fixed P-value calculation when importing HOMER motifs. Peviously it
would simply assume the log threshold value was the P-value. Now
motif_pvalue() is used to properly calculate a P-value.
universalmotif 1.2.1
BUG FIXES
- Mispelled variable in enrich_motifs().
universalmotif 1.2.0
NEW FEATURES
- New motif_peaks() function: test for significantly overrepresented peaks
of motif sites in a set of sequences.
- New get_bkg() function: calculate background frequencies of sequence
alphabets, including higher order backgrounds. Works for any sequence
alphabet. Can also create MEME background format files.
- read_meme() has a new option, readites.meta, which allows for reading
individual motif site positions and P-values, as well as combined
sequence P-values.
- shuffle_sequences(..., method = "markov") works for any set of
characters instead of just DNA/RNA.
- shuffle_sequences(): new shuffling method, 'euler'. This allows for k>1
shuffling that preserves exact letter counts, as opposed to 'markov'.
This method is set as the new default shuffling method.
- create_sequences() has a new option "freqs" which allows for generating
sequence from higher order backgrounds and any sequence alphabet
(options "monofreqs", "difreqs" and "trifreqs" are now deprecated).
- universalmotif objects can now hold onto higher order backgrounds.
- motif_pvalue() with use.freq > 1 can calculate P-values from
provided higher-order backgrounds, instead of assuming a uniform
background.
- add_multifreq() adds corresponding higher order background probabilities
to motifs.
- New get_klets() utility function: generate all possible k-lets for any
set of characters.
- New score_match() utility function: score a match for a particular motif.
- New get_matches() utility function: get all possible motif matches above
a certain score.
- New count_klets() utility function: count all k-lets for any string
of characters.
- New motif_score() utility function: calculate motif score from input
thresholds.
- New shuffle_string() utility function: shuffle a string of character
using one of three methods: euler, linear, and markov.
- The native write_motifs()/read_motifs() universalmotif format is now
YAML based. Motifs written before v1.2.0 can still be read by
read_motifs().
MINOR CHANGES
- Increased input security for character type parameters throughout.
- Expanded motif_pvalue(), scan_sequences(), motif_tree() examples
sections.
- New vignette sections for motif_peaks() and get_bkg() added to
SequenceSearches.Rmd.
- Various vignette tweaks.
- Fixed various spelling mistakes throughout, added Language field to
Description, and added spell check to tests.
- Documentation for the "random" shuffling method has been removed and a
warning is shown when used to tell the user that it will be removed in
the next minor update.
- Generally increased test coverage.
- The "k=1", "linear" and "markov" shuffling methods are much faster.
- create_sequences() for higher order backgrounds is much faster.
- Faster add_multifreqs(): slight improvement for DNA motifs, big
improvement for non-DNA motifs.
- sample_sites() has been rewritten for use.freq > 1: the probability of
each letter in the site is now dependent on the previous letters (also
faster and more memory efficient for any use.freq).
- Improvement to calculating motif scores from p-value input: no
longer guesses different scores, instead estimating a normal distribution
of scores. This new approach is much, much faster and more memory
efficient. It does however assume a uniform background.
- The "score.pct" column in scan_sequences() results now represents the
percent score based on the total possible score, not just the score
between zero and the max possible score.
- summarise_motifs() is much faster.
- Objects in data/ are saved using serialization format version 3.
- convert_motifs(motif, class = "universalmotif-universalmotif"): performs
a validObject() check if "motif" is a universalmotif object.
- The show() method for universalmotif objects performs a validObject()
check first.
- motif_rc() has a new option "ignore.alphabet", used to turn on or off the
alphabet check (checks for DNA/RNA motif).
- Added "overwrite" and "append" options to write_*() functions.
- enrich_motifs(..., return.scan.results = FALSE): uses a slimmed down
version of scan_sequences() which skips construction of the complete
results data.frame, saving a tiny bit of time on large jobs.
- compare_motifs() now includes log P-values. This way comparisons can
still be properly ranked even if their P-values are below the machine
limit.
- convert_motifs() from MotifList (MotifDb) carries over dataSource.
- If a MEME motif has two names, the second will be assigned as "altname"
by read_meme().
- Utilities documentation has been split into two: ?utils-motif and
?utils-sequence.
BUG FIXES
- Fixed IC score calculation from character input in create_motif().
- The internal DNA consensus letter calculation previously did not assign
ambiguous letters when one PPM position was >0.5 and another was >0.25.
This was unintended behaviour and will now output the proper ambigous
DNA letter.
universalmotif 1.0.22
BUG FIXES
- Fixed incorrect RcppExports code introduced in last patch.
universalmotif 1.0.21
BUG FIXES
- Fixed an incorrect citation in motif_pvalue().
universalmotif 1.0.20
BUG FIXES
- Fixed a bug introduced in previous patches where create_sequences()
fails with alphabet = "RNA" and missing difreq/trifreq.
universalmotif 1.0.19
BUG FIXES
- Fixed create_sequences(alphabet = "RNA") when providing difreq/trifreq.
universalmotif 1.0.18
BUG FIXES
- Fixed alphabet letters being stripped from difreq and trifreq params in
create_sequences().
- Fixed an incorrect call to sample() when using create_sequences() with
difreq.
universalmotif 1.0.17
BUG FIXES
- Custom motif alphabets are properly sorted in the alphabet slot of motifs.
- scan_sequences() properly matches custom sequence and motif alphabets.
universalmotif 1.0.16
BUG FIXES
- scan_sequences() will now properly create a scoring matrix from motifs
with pseudocounts of 0.
universalmotif 1.0.15
BUG FIXES
- view_motifs() will now give an informative error message when trying
to plot multiple motifs with non-unique names.
universalmotif 1.0.14
BUG FIXES
- Fixed 'method' parameter documentation for motif_tree().
universalmotif 1.0.13
BUG FIXES
- Fixed the error message given when a vector of incorrect length is
used in a function.
universalmotif 1.0.12
BUG FIXES
- motif_pvalue() no longer throws an error for
motif_pvalue(..., pvalue = 0).
- motif_tree() now works properly with dist objects as input.
universalmotif 1.0.11
BUG FIXES
- The compare_motifs() example for min.mean.ic in the Advanced Usage
vignette now makes more sense.
universalmotif 1.0.10
BUG FIXES
- More strangely behaving MotifDb vignette code addressed in Advanced Usage
vignette.
universalmotif 1.0.9
BUG FIXES
- shuffle_motifs() now produces motifs of proper length.
universalmotif 1.0.8
BUG FIXES
- Trying to prevent R CMD BUILD from changing the behaviour of vignette
code involving MotifDb package.
universalmotif 1.0.7
BUG FIXES
- merge_motifs() will not show repeat families/organisms in new merged
motif.
- show method will no longer show name slot instead of altname.
universalmotif 1.0.6
BUG FIXES
- If MEME motif file has no strand info, assume 'strand = "+"', not
'strand = c("+", "-")'.
universalmotif 1.0.5
BUG FIXES
- 'read_meme()' can now read non-DNA/RNA motifs.
- Removed duplicate line in run_meme.R.
- 'scan_sequences()' will not scan mismatching motif/sequence alphabets.
- Verbose output from 'scan_sequences()' will now display correctly.
- Using 'enrich_motifs()' and not finding any motif hits in the input
sequences no longer throws an error.
- Fixed threshold calculation in 'enrich_motifs()'.
- 'enrich_motifs()' will now show results for motifs which have hits in
target sequences but none in bkg sequences.
universalmotif 1.0.4
BUG FIXES
- Can now use 'view_motifs(..., tryRC=F)' without throwing an error.
universalmotif 1.0.3
BUG FIXES
- Missed a couple [Biostrings::*StringSet-class] from last patch.
- Updated README to reflect new installation method.
- Wrapped instances of \link{} with \code{\link{}}.
universalmotif 1.0.2
BUG FIXES
- 'read_meme()' can now read meme result files with missing strand info.
- Use \link{*StringSet} instead of [Biostrings::*StringSet-class] in
documentation.
- No longer load MotifDb package in examples on Windows.
universalmotif 1.0.1
BUG FIXES
- TFBSTools motifs with multiple species can convert to universalmotif.
- 'scan_sequences()': will now ignore non-standard letters instead of
crashing.
universalmotif 1.0.0
SIGNIFICANT USER-VISIBLE CHANGES
- Changed the appearance of some of the vignette code blocks.
- More documentation added in data.R.
BUG FIXES
- Replaced for loop with 'lapply()' in add_multifreq.R L120-133.
- Replaced for loop with 'lapply()' in enrich_motifs.R L327-330.
- Replaced for loop with 'lapply()' in shuffle_motifs.R L77-80.
- Using 'diag()' instead of for loop in 'fix_pcc_diag()'
(compare_motifs.R).
- Fixed 'read_motifs()' not parsing alphabet correctly.
- Vignettes are now built using pdflatex instead of lualatex.
universalmotif 0.99.0
universalmotif 0.98.0