-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathREADME.Rmd
More file actions
156 lines (108 loc) · 6.37 KB
/
Copy pathREADME.Rmd
File metadata and controls
156 lines (108 loc) · 6.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
---
output:
github_document
bibliography: inst\\REFERENCES.bib
---
<!-- README.md is generated from README.Rmd. Please edit that file -->
```{r, echo = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
fig.path = "man/figures/README-",
eval = TRUE
)
```
# ir <img src='man/figures/logo-hex.png' align="right" height="139" alt="logo" style="float:right; height:200px;" />
<!-- badges: start -->
[](https://zenodo.org/badge/latestdoi/234117897)
[](https://lifecycle.r-lib.org/articles/stages.html#stable)
[](https://CRAN.R-project.org/package=ir)
<!-- badges: end -->
## Overview
'ir' is an R package to import, handle and preprocess infrared spectra. Infrared spectra are stored as list columns in data frames which enables efficient storage of metadata along with the spectra and using 'tidyverse' functions for data operations.
**Spectra in the following formats can be imported:**
1. `csv` files with individual spectra.
2. Thermo Galactic's `spc` files with individual spectra.
**Functions for spectral preprocessing and data handling:**
1. baseline correction with:
* a polynomial baseline
* a convex hull baseline
* a Savitzky-Golay baseline [@Lasch.2012]
2. binning
3. clipping
4. interpolating (resampling, linearly)
5. replacing selected parts of a spectrum by a straight line
6. averaging spectra within specified groups
7. normalizing spectra:
* to the maximum intensity
* to the intensity at a specific x value
* so that all intensity values sum to 1
* vector normalization
* Standard Normal Variate correction
8. smoothing:
* Savitzky-Golay smoothing
* Fourier smoothing
9. computing derivatives of spectra using Savitzky-Golay smoothing
10. spectral arithmetic (addition, subtraction, multiplication, division)
11. computing the variance of intensity values (optionally after subtracting reference spectra)
12. computing maxima, minima, median, and ranges of intensity values of spectra
13. Atmospheric background correction [@Perez-Guaita.2013]
14. Scaling intensity values in spectra
15. Wrapper to sampling algorithms implemented in the 'prospectr' package.
16. plotting
17. [tidyverse](https://tidyverse.org/) methods
### How to install
You can install 'ir' from CRAN:
```{r installation-cran, eval = FALSE}
install.packages("ir")
```
You can install the development version of 'ir' from GitHub:
```{r installation-github, eval = FALSE}
remotes::install_github(repo = "henningte/ir")
```
### How to use
Load 'ir':
```{r load_ir, warning=FALSE}
# load ir package
library(ir)
# load additional packages needed for this tutorial
library(ggplot2)
```
For brief introductions, see below and the two vignettes:
1. [`r rmarkdown::yaml_front_matter("vignettes/ir-introduction.Rmd")$title`](https://henningte.github.io/ir/articles/ir-introduction.html)
2. [`r rmarkdown::yaml_front_matter("vignettes/ir-class.Rmd")$title`](https://henningte.github.io/ir/articles/ir-class.html)
#### Sample workflow
Here is an example preprocessing pipeline for the sample data in the package (`ir_sample_data`) which does baseline correction, binning (bin width of 10), normalization (so that the maximum intensity value is 1 and the minimum intensity value is 0), and finally plots the preprocessed spectra for each sample and sample type:
```{r sample_data_workflow}
ir_sample_data |> # data
ir::ir_bc(method = "rubberband") |> # baseline correction
ir::ir_bin(width = 10) |> # binning
ir::ir_normalize(method = "zeroone") |> # normalization
plot() + ggplot2::facet_wrap(~ sample_type) # plot
```
#### Data structure
You can load the sample data with:
```{r ir_sample_data_load}
ir::ir_sample_data
```
`ir_sample_data` is an object of class `ir`. An Object of class `ir` is a data frame where each row represents one infrared measurement and column `spectra` contains the infrared spectra (one per row) as list column. This allows to store metadata along each spectrum (for example the N content for each sample) and to manipulate `ir` objects with 'tidyverse' functions.
The column `spectra` is a list column of data frames, meaning that each cell of `spectra` contains a data frame which contains the data for one spectrum. For example, here are the first rows of the first spectrum in `ir_smaple_data`:
```{r ir_sample_data_inspect_spectra}
# View the first ten rows of the first spectrum in ir_sample_data
head(ir_sample_data$spectra[[1]])
```
Column `x` contains values for the spectral channel (in this case wavenumbers [cm<sup>-1</sup>]) and column `y` the corresponding intensity values.
### How to cite
Please cite this R package as:
> Henning Teickner (`r format(Sys.Date(), "%Y")`). _ir: Functions to Handle and Preprocess Infrared Spectra_. DOI: 10.5281/zenodo.5747169. Accessed `r format(Sys.Date(), "%d %b %Y")`. Online at <https://zenodo.org/record/5747169>.
### Companion packages
The [irpeat](https://github.com/henningte/irpeat/) package provides functions to analyze infrared spectra of peat (humification indices, prediction models) and uses the 'ir' package to handle spectral data.
### Licenses
**Text and figures :** [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/)
**Code :** See the [DESCRIPTION](DESCRIPTION) file
**Data :** [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) attribution requested in reuse. See the sources section for data sources and how to give credit to the original author(s) and the source.
### Contributions
We welcome contributions from everyone. Before you get started, please see our [contributor guidelines](CONTRIBUTING.md). Please note that this project is released with a [Contributor Code of Conduct](CONDUCT.md). By participating in this project you agree to abide by its terms.
### Sources
`ir_sample_data` is derived from @Hodgkins.2018 and was reformatted to match the requirements of 'ir'. The original article containing the data can be downloaded from https://www.nature.com/articles/s41467-018-06050-2 and is distributed under the Creative Commons Attribution 4.0 International License (https://creativecommons.org/licenses/by/4.0/). The data on Klason lignin and holocellulose content are originally from @DelaCruz.2016.
### References