Changes in version 4.15.0 Breaking changes - plot_vip_scores(): nbootstrap argument renamed to n_samples, and its threshold line now uses the correct degrees of freedom (df = n_samples - 1), matching the selection bp_VIP_analysis() actually performs. - nmr_read_bruker_fid(): endian argument removed (byte order is now auto-detected from acqus), and it now returns a data frame with time_s/fid_complex columns instead of a raw numeric vector. Also fixes silent truncation of the FID to half its length. - nmr_baseline_threshold() / nmr_baseline_threshold_plot(): range_without_peaks / chemshift_range no longer default to c(9.5, 10) ppm; must now be given explicitly. - nmr_detect_peaks(): range_without_peaks no longer defaults to c(9.5, 10) ppm either; either it or baselineThresh must now be given, or the call aborts with a clear message instead of failing deep inside with a confusing one (#66). - download_MTBLS242(): keep_only_preop_and_3months (logical) replaced by timepoints (a character vector of TimePoint values to keep, or NULL for every timepoint), so any two (or more) of the study's five timepoints can be selected, not just preop and 12 months. timepoints = c("preop", "12 months after surgery") is the new default and reproduces the old keep_only_preop_and_3months = TRUE behavior. - nmr_baseline_threshold_plot(): NMRExperiment = NULL now means "every sample" (paginated via new nrow/ncol/page arguments) instead of silently subsampling to 10 random samples when there were more than 20. "all" remains a synonym for NULL. nrow/ncol default to a snug grid for small sample counts, or a fixed 3x3 (paginate with page) for 7 or more. - nmr_baseline_estimation(): now estimates the baseline with psalsa() (PSALSA) instead of baseline::baseline.als() (ALS), and gains a new k argument (PSALSA's peak height parameter). lambda, p, k and maxit all now default to "auto": whenever any of lambda/p/k is "auto", tune_psalsa() is run once across every sample in the dataset to pick values for them automatically; pass an explicit number instead to bypass tuning for that parameter. maxit = "auto" uses psalsa()'s own default, since tune_psalsa() does not tune it. Existing calls passing ALS-scale lambda/p values (e.g. lambda = 9, p = 0.01) must be updated, since those values mean something very different for PSALSA (lambda is typically 1e5-1e8). New features - nmr_baseline_threshold_plot(): new nrow/ncol/page arguments paginate the per-sample facets instead of cramming every sample onto one illegible page. - bp_VIP_analysis() / bp_kfold_VIP_analysis(): new optional identity_column argument. When given, fold assignment and bootstrap resampling keep every identity_column group (e.g. a subject's repeated measurements) together, and the fitted plsda models become multilevel, matching what nmr_data_analysis() already did for the same identity_column. Opt-in and backward compatible (defaults to NULL, reproducing the previous behavior). Bug fixes - peaklist_fit_lorentzians() (used by nmr_detect_peaks(fit_lorentzians = TRUE)): its "Fitting lorentzians" progress bar was not gated behind the same interactive/non-knitr check every other progress bar in the package uses, so it always printed, including inside notebooks/vignettes. - nmr_identify_regions_blood() / nmr_identify_regions_urine() / nmr_identify_regions_cell(): each ppm_to_assign query always contributed exactly num_proposed_compounds rows, padding with NA when fewer candidate metabolites were found within tolerance; those NA-only rows are now dropped instead of returned. - models_stability_plot_plsda() / models_stability_plot_bootstrap(): the loadings-correlation heatmap now uses a fixed, sign-agnostic color scale (-1 and +1 both render as the same dark blue, 0 as white; a latent variable's sign is arbitrary, so -1 and +1 indicate equally strong agreement) instead of a plain sequential palette that auto-scaled to whatever range the data happened to have. Also fixes self-correlation cells (expected to be exactly 1) intermittently rendering as blank/white: a loading vector's self dot-product can come out as e.g. 1.0000000000000002 due to floating-point rounding, which fell just outside the (-1, 1) scale limits and was dropped to NA by ggplot2's default out-of-bounds handling; now clamped to the nearest limit instead. - bp_VIP_analysis(): VIP scores were indexed by the requested ncomp rather than the fitted model's actual model$ncomp; on data where mixOmics silently fits fewer components than requested (e.g. a degenerate bootstrap resample), this caused subscript out of bounds. - bp_kfold_VIP_analysis(): fixed fold partitioning, which assigned samples to folds with a deterministic x %% k split instead of the intended random shuffle. - bp_VIP_analysis(): a degenerate (single-class) bootstrap resample is now redrawn instead of being patched with a fixed, non-random replacement, which biased a fraction of the bootstrap replicates. - read_bruker_param(): fixed a wrong regex capture-group index causing subscript out of bounds on some Bruker parameter files. - parse_title_file(): fixed a gsub() call missing perl = TRUE, which left trailing whitespace untrimmed from Bruker pdata title fields. - choose_best_nlv(): fixed a key-name mismatch that made diagnostic_plot, diagnostic_box_plot, and model_performances always NULL for models built with plsda_auroc_vip_method(). - models_stability_plot_plsda() / models_stability_plot_bootstrap() / plot_bootstrap_multimodel(): fixed two ggplot2 arguments deprecated since ggplot2 3.3.4/3.4.0, which warned on every call. - create_sample_names(): disambiguates samples sharing a leaf directory name (e.g. Bruker EXPNO 10) by stripping the full common path prefix, instead of only one parent level. Collisions more than one level deep now get readable names instead of vctrs-generated ...N suffixes (#62). - tidy.nmr_dataset_1D() (and thus plot() / nmr_baseline_threshold_plot()): an unknown NMRExperiment value now warns and is excluded (if some values are valid) or errors (if none are), instead of silently returning rows with NA intensities (#69). Other changes - nmr_baseline_removal() is deprecated and will be removed in early 2027. Use nmr_baseline_estimation() instead. - download_MTBLS242(): validate downloaded files against MetaboLights' published SHA-256 checksums for the MTBLS242 dataset (#72). - Bumped several dependency version floors to roughly their versions from a year ago. Packages with a recent major release are pinned to the last minor of the previous major instead, to avoid forcing an upgrade: ggplot2 (>= 3.5.2), fs (>= 1.6.7), curl (>= 6.4.0), zip (>= 2.3.3), progressr (>= 0.19.0). Changes in version 4.11.1 (2025-09-24) - Compatibility with ggplot2-4.0. Changes in version 4.7.2 (2024-08-10) - Disable nested parallellization in nmr_detect_peaks_tune_snr(). Changes in version 4.7.1 (2024-06-02) - Added nmr_autophase() for automated phase correction using the NMRphasing package (#68). - Added to_ASICS function to export dataset for ASICS quantification (#68). Changes in version 4.1.6 (2023-02-16) - Download improvements: - Progress bar - Detect user interruptions - Sleep 3 seconds between retrying failed downloads Changes in version 4.1.5 (2023-02-10) - Replace deprecated dplyr::select() calls. - Remove workaround for mixOmics bug, bump mixOmics dependency - Simplify implementation (same algorithm) for determining the optimal number of latent variables in the plsda models. - Bump dplyr dependency version. Changes in version 4.1.4 (2022-11-08) - Disable nested parallelization - Update workaround Biocparallel bpmapply - Revert bpstop to sleep Changes in version 4.1.3 (2022-11-07) - Closer to the fix Changes in version 4.1.2 (2022-11-04) - Try a more robust fix on palomino4 (bpstop() instead sleep) - Use register() in an example to avoid further breakage on palomino - Workaround performance issues on BiocParallel::bpmapply() (https://github.com/Bioconductor/BiocParallel/pull/228) Changes in version 4.1.1 (2022-11-02) - Remove archive dependency - Try fixing build on palomino4, due to race condition in R CMD check Changes in version 3.99.7 (2022-10-27) Minor changes - Fix build issue on palomino4, simplifying helper function Changes in version 3.99.6 (2022-10-26) Minor changes - When saving, normalize extra information is saved as well. - Updated downsampled demo data for examples. - More robust nmr_baseline_threshold() - Faster examples Changes in version 3.99.5 (2022-10-26) Minor changes - Remove call to deprecated ggplot2::qplot() Changes in version 3.99.4 (2022-10-19) Major changes - Improved the download_MTBLS242() function, allowing to either download the parts of MTBLS242 needed for the tutorial or the whole dataset, which may be nice to have if you want to play beyond the tutorial. - When reading a Bruker sample from a zip file, you now can specify in the file name the zip subdirectory. For instance, "/path/to/sample.zip!/sample/3", when sample.zip contains a folder named sample with a subfolder named 3 that includes the sample data you want to actually read. Minor changes - Remove Bioconductor Build System workaround, since https://github.com/Bioconductor/BBS/issues/220 was fixed. Changes in version 3.99.3 (2022-10-17) - Add libarchive as a SystemRequirement to workaround a limitation of the Bioconductor build system (BBS), that can't pick system requirements recursively. Thanks to Jennifer Wokaty for checking the BBS and providing this suggestion. Changes in version 3.99.2 (2022-10-14) Breaking changes - Set fix_baseline = FALSE in nmr_integrate_regions() as default. The former TRUE approach here did not make much sense if peak boundaries were not perfectly established. Major changes - Baseline estimation: We now offer nmr_baseline_estimation() besides nmr_baseline_removal(). The estimation function computes the baseline and saves it instead of subtracting it from the signal. This is a better approach because it lets each step of the pipeline decide whether it makes sense to subtract the baseline or not. The nmr_baseline_removal() is for now still available, but it will be deprecated in a future version. - For the baselineThresh argument in nmr_detect_peaks() we now suggest using nmr_baseline_threshold(dataset, method = "median3mad"). This is more robust than the former (but still the default) method. - Peak detection and integration: We want to approach the peak detection, clustering an integration in a different way. While the old pipeline still works as expected, we have introduced new arguments to peak detection, with backwards compatible defaults and a peak clustering function. We still provide the vignette with the former workflow, because it is still relevant but we may deprecate it in a future version, once we are confident the changes we are making are robust across several datasets. - Parallellization: We are switching from the future package to BiocParallel, to better integrate in the Bioconductor ecosystem. In this version, if you use a different future plan you may get a warning to switch to BiocParallel. In a future version we will remove our dependency with the (awesome) future package. Minor changes - You can now set experiment names (NMRExperiment) with names(dataset) <- c("Sample1", "Sample2"). - You can now pass a named vector with the sample names to the nmr_read_samples function. The names will be used as the sample names. - Peak detection has a more robust baseline threshold estimation - Peak detection estimates the baseline threshold on each sample individually. The threshold is calculated using only the sample where we are currently detecting the peaks. - Peak detection includes a simple but effective lorentzian fitting (for area and width estimation) - Add functions to evaluate the quality of the peak detection using plots - More fine grained interpolation axis if axis = NULL is given in nmr_interpolate_1D() - Save list of excluded regions in the nmr_dataset object. - Drop MassSpecWavelet workaround on partial argument matching since it was fixed upstream - Documentation: Start providing verbose messages with tips in functions - Remove unused deprecated imports from the future package (#65, thanks to @HenrikBengtsson) - Add URL and BugReports to the DESCRIPTION (#64, thanks to @HenrikBengtsson) - Reading bruker samples is now a bit more robust and gives detailed tracebacks in case of error. Changes in version 3.5.1 (2022-04-07) - plot_interactive now accepts an overwrite argument to avoid asking the user interactively - Improve nmr_detect_peaks_tune_snr to tune the SNR threshold with the right other parameters - Documentation improvements - Split Peak_detection page into smaller and more specific pages - Let the user choose how code is parallellized, as suggested by BiocParallel documentation. - Replace furr/future parallellization loops with BiocParallel. Provides a warning in case a future::plan() has been set. - Demote Imports to Suggests: SummarizedExpriment, S4Vectors, ggrepel, GGally - Remove dependencies: tidyselect, assertthat, plyr, furrr - Add download_MTBLS242() function to help download the data for the tutorial - Skip mixOmics test if affected by https://github.com/mixOmicsTeam/mixOmics/pull/199 - Fix auto setting of the baseline threshold for the peak detection Changes in version 3.3.4 (2021-09-16) - Fix issue with PCA plots not working as expected - Ensure NMRExperiment names are not duplicated in a dataset (closes #44) - Fix issue with some title file formatting in Bruker samples (closes #46) - Export groups in to_ChemoSpec - License since AlpsNMR was released has alwayd been MIT as stated in the bioinformatics paper Changes in version 3.1.5 - Removed warning about future_options deprecation Changes in version 3.1.4 - bug fix loading bruker files Changes in version 3.1.3 (2020-11-19) - Added instructions to follow a longer tutorial - nmr_pca_outliers_plot modified to show names in all boundaries of the plot Changes in version 3.1.2 (2020-11-04) - Bug fix related with Bioconductor Renviron variable R_CHECK_LENGTH_1_CONDITION Changes in version 3.1.1 (2020-10-30) - Modified order of author list Changes in version 3.1.0 (2020-10-22) - Package accepted in bioconductor Changes in version 2.99.93 (2020-10-22) - Héctor removed as maintainer to ensure a single point of contact Changes in version 2.99.92 (2020-10-22) - Héctor added as maintainer Changes in version 2.99.91 (2020-10-22) - test changed Changes in version 2.99.9 (2020-10-22) - Added Héctor ass author - Bug fix in nmr_read_bruker_fid Changes in version 2.99.8 (2020-10-22) - Deletion of tutorial and download_MTBLS242_demo.R Changes in version 2.99.7 (2020-10-19) - Bugs in import/export functions to SummarizedExperiment solved Changes in version 2.99.6 (2020-10-19) - Added import/export options form nmr_dataset_1D to SummarizedExperiment - Added import/export options form nmr_dataset_peak_table to SummarizedExperiment Changes in version 2.99.5 (2020-10-14) - Bug in bp_kfold_VIP_analysis solved - Several packages moved from import to depends - Reexport of some functions removed - to_rDolphin_blood code reorganized - Typos removed from tutorial - norm_pqn_diagnostic$norm_factor used in tutorial instead of plot it - Parallel changed for BiocParallel Changes in version 2.99.4 (2020-09-28) - Warning in plot_interactive function added - Suppressed other warnings of plot_interactive function Changes in version 2.99.3 (2020-09-21) - sapply calls changed for vapply - Bioconductor installation instructions included - MIT license removed - LazyData: TRUE removed - Excessive print statements removed from vignettes - sessionInfo() added to end of vignettes - Created inst/script directoy to describe inst/extdata source and creation #TODO falta rellenar el archivo - Commented out code removed Changes in version 2.99.2 (2020-08-26) - AlpsNMR.Rproj removed from git repository - Reduced demo dataset to avoid package size > 5 MB - Modified introduction to alpsnmr vignette and some tests to work with reduced demo dataset Changes in version 2.99.1 (2020-08-25) - AlpsNMR.Rproj added to gitignore - Modified examples to avoid create files in main package folder Changes in version 2.99.0 (2020-08-24) - Added bootstrap and permutation method and some plots related to it - Minor modifications for bioconductor submision Changes in version 2.5.9002 (2020-05-25) - Changes to pass BiocCheck - Added permutation test and permutation test plot to nmr_data_analysis Changes in version 2.4.9002 (2020-05-13) - Changes to pass checks for R4 Changes in version 2.3.3.9002 - NIHS_specific removed - Tests coverage up to 30% - Update of save_profiling_plots - Add tutorial - Remotes installation - nmr_diagnose is deprecated. Since nmr_diagnose was only used for getting extra normalization information, it was been replaced with nmr_normalize_extra_info that offers a less confusing name. Changes in version 2.3.3.9001 - Add nmr_identify_regions_cell function - Add documentation of HMDB_cell - Vignettes updated - New functions to apply multilevel statistics - Update of README file Changes in version 2.3.3 - Change of nmr_identify_regions_blood function - Add nmr_identify_regions_urine function - Add documentation of HMDB_urine - Add computes_peak_width_ppmfunction for nmr_integrate_peak_positions - New get_integration_with_metadata - Vignettes updated - New functions to apply machine learning to proccessed datasets Changes in version 2.3.2 - Inclusion of baseline removal using assymetric least squares - Change the baselineThresh to NULL so it is autodetected - Vignettes updated including baseline removal - Bug correction in nmr_baseline_threshold - Elimination of package vignettes (there is an error to be solved there) - New nmr_identify_regions function - Add documentation of HMDB_blood - New files_to_rDolphin function Changes in version 2.3.1.9000 - Rename package from NIHSnmr to AlpsNMR Changes in version 2.3.1 - Change SNR.Th value from 3 to 4 in pipeline_example.R - Update installation instructions - Last version form Sergio (changes not significant since 2.3.0) Changes in version 2.3.0 - Improve installation instructions under R<3.5 - nmr_peak_detection_tune_snr function added. - Minor bug fixes Changes in version 2.2.0 - Improve installation instructions - Clarify Add metadata vignette - Add normalization diagnostics - Add some data analysis helpers - Enable parallellization for sample loading, peak detection and data analysis helpers - Do not set negative area values to zero, to avoid biasing variances - Add metadata from a single tidy excel function - Add nmr_diagnose to get and set diagnostic information - Add nmr_diagnose support to nmr_normalize - Minor bug fixes Changes in version 2.1.0 - Documentation improvements - nmr_dataset_peak_table object for peak detection results Changes in version 2.0.0 - Too many changes to be listed here. Check the vignette for a summary of all the features. Use browseVignettes("NIHSnmr"). Changes in version 1.2.0 Breaking changes - Rename injection_id to NMRExperiment. - nmr_dataset_load and nmr_dataset_save now use readRDS and saveRDS instead of load and save. This is the right approach to serialize single R objects. If you need a script to convert previously saved datasets (created using nmr_dataset_save) please use NIHSnmr:::nmr_dataset_load_old_and_save("your_old_file.RData", "your_old_file.RDS") to convert the files. Sorry for the inconvenience, but the sooner we fix this the better. - filter to select a subset of samples from an nmr_dataset object has been adapted to dplyr >= 0.7.4. Unless you used the .dots argument in your calls there is no need to change anything. This means we now use a tidy evaluation syntax for filter. - nmr_get_metadata() returns always a data frame / tibble, even when only a single column is requested. It also always includes the "NMRExperiment" column. - nmr_dataset object has two tables metadata and metadata_ext. The metadata_ext table includes all the metadata we add with nmr_add_metadata while metadata has the internal metadata (acquisition parameters, etc). Please use nmr_get_metadata(nmr_dataset) instead of nmr_dataset$metadata. Other changes - Remove workaround to dplyr issue: https://github.com/tidyverse/dplyr/issues/2203 (Sergio Oller reported and fixed the issue, dplyr-0.7.0 is fixed) - The Bruker title file has quite a free format definition. A title file can contain lines like "Field value" or "Field value ;" or simply "value". The heuristics to parse the title file have been improved. - Depend on tidyr 0.8.1. tidyr 0.8.0 had a bug that we reported (and for which we also provided a fix): https://github.com/tidyverse/tidyr/pull/419 - nmr_get_metadata gives a warning if the user asks for metadata columns that are missing. - New nmr_integrate_regions function. - nmr_normalize accepts pqn normalization.