This vignette describes MSnbase’s input and output capabilities.
MSnbase 2.16.1
MSnbase is under active development; current functionality is evolving and new features will be added. This software is free and open-source software. If you use it, please support the project by citing it in publications:
Gatto L, Lilley KS. MSnbase-an R/Bioconductor package for isobaric tagged mass spectrometry data visualization, processing and quantitation. Bioinformatics. 2012 Jan 15;28(2):288-9. doi: 10.1093/bioinformatics/btr645. PMID: 22113085.
For bugs, typos, suggestions or other questions, please file an issue
in our tracking system (https://github.com/lgatto/MSnbase/issues)
providing as much information as possible, a reproducible example and
the output of sessionInfo()
.
If you don’t have a GitHub account or wish to reach a broader audience for general questions about proteomics analysis using R, you may want to use the Bioconductor support site: https://support.bioconductor.org/.
MSnbase’s aims are to facilitate the reproducible analysis of mass spectrometry data within the R environment, from raw data import and processing, feature quantification, quantification and statistical analysis of the results (Gatto and Lilley 2012). Data import functions for several formats are provided and intermediate or final results can also be saved or exported. These capabilities are presented below.
Data stored in one of the published XML
-based formats. i.e. mzXML
(Pedrioli et al. 2004), mzData
(Orchard et al. 2007) or mzML
(Martens et al. 2010), can
be imported with the readMSData
method, which makes use of the
mzR package to create MSnExp
objects. The files can be
in profile or centroided mode. See ?readMSData
for details.
Data from mzML
files containing chromatographic data (e.g. generated in
SRM/MRM experiments) can be imported with the readSRMData
function that
returns the chromatographic data as a MChromatograms
object. See ?readSRMData
for more details.
Peak lists in the mgf
format1 http://www.matrixscience.com/help/data_file_help.html
can be imported using the readMgfData
. In this case, the peak data
has generally been pre-processed by other software. See
?readMgfData
for details.
Third party software can be used to generate quantitative data and
exported as a spreadsheet (generally comma or tab separated format).
This data as well as any additional meta-data can be imported with the
readMSnSet
function. See ?readMSnSet
for details.
MSnbase also supports the mzTab
format2 https://github.com/HUPO-PSI/mzTab, a light-weight,
tab-delimited file format for proteomics data developed within the
Proteomics Standards Initiative (PSI). mzTab
files can be read into
R with readMzTabData
to create and MSnSet
instance.
R objects can most easily be stored on disk with the save
function.
It creates compressed binary images of the data representation that
can later be read back from the file with the load
function.
MSnExp
and OnDiskMSnExp
files can be written to MS data files in mzML
or
mzXML
files with the writeMSData
method. See ?writeMSData
for details.
MSnExp
instances as well as individual spectra can be written as
mgf
files with the writeMgfData
method. Note that the meta-data in
the original R object can not be included in the file. See
?writeMgfData
for details.
Quantitation data can be exported to spreadsheet files with the
write.exprs
method. Feature meta-data can be appended to the feature
intensity values. See ?writeMgfData
for details.
Deprecated MSnSet
instances can also be exported to mzTab
files using the writeMzTabData
function.
MSnSet
from text spread sheetsThis section describes the generation of MSnSet
objects using data
available in a text-based spreadsheet. This entry point into R and
MSnbase allows to import data processed by any of the
third party mass-spectrometry processing software available and
proceed with data exploration, normalisation and statistical analysis
using functions available in and the numerous Bioconductor
packages.
The following section describes a work flow that uses three input
files to create the MSnSet
. These files respectively describe the
quantitative expression data, the sample meta-data and the feature
meta-data. It is taken from the pRoloc tutorial and
uses example files from the pRolocdat package.
We start by describing the csv
to be used as input using the
read.csv
function.
## The original data for replicate 1, available
## from the pRolocdata package
f0 <- dir(system.file("extdata", package = "pRolocdata"),
full.names = TRUE,
pattern = "pr800866n_si_004-rep1.csv")
csv <- read.csv(f0)
The three first lines of the original spreadsheet, containing the data
for replicate one, are illustrated below (using the function
head
). It contains 888 rows (proteins) and 16
columns, including protein identifiers, database accession numbers,
gene symbols, reporter ion quantitation values, information related to
protein identification, …
head(csv, n=3)
## Protein.ID FBgn Flybase.Symbol No..peptide.IDs Mascot.score
## 1 CG10060 FBgn0001104 G-ialpha65A 3 179.86
## 2 CG10067 FBgn0000044 Act57B 5 222.40
## 3 CG10077 FBgn0035720 CG10077 5 219.65
## No..peptides.quantified area.114 area.115 area.116 area.117
## 1 1 0.379000 0.281000 0.225000 0.114000
## 2 9 0.420000 0.209667 0.206111 0.163889
## 3 3 0.187333 0.167333 0.169667 0.476000
## PLS.DA.classification Peptide.sequence Precursor.ion.mass
## 1 PM
## 2 PM
## 3
## Precursor.ion.charge pd.2013 pd.markers
## 1 PM unknown
## 2 PM unknown
## 3 unknown unknown
Below read in turn the spread sheets that contain the quantitation
data (exprsFile.csv
), feature meta-data (fdataFile.csv
) and sample
meta-data (pdataFile.csv
).
## The quantitation data, from the original data
f1 <- dir(system.file("extdata", package = "pRolocdata"),
full.names = TRUE, pattern = "exprsFile.csv")
exprsCsv <- read.csv(f1)
## Feature meta-data, from the original data
f2 <- dir(system.file("extdata", package = "pRolocdata"),
full.names = TRUE, pattern = "fdataFile.csv")
fdataCsv <- read.csv(f2)
## Sample meta-data, a new file
f3 <- dir(system.file("extdata", package = "pRolocdata"),
full.names = TRUE, pattern = "pdataFile.csv")
pdataCsv <- read.csv(f3)
exprsFile.csv
contains the quantitation (expression) data for the
888 proteins and 4 reporter tags.
head(exprsCsv, n = 3)
## FBgn X114 X115 X116 X117
## 1 FBgn0001104 0.379000 0.281000 0.225000 0.114000
## 2 FBgn0000044 0.420000 0.209667 0.206111 0.163889
## 3 FBgn0035720 0.187333 0.167333 0.169667 0.476000
fdataFile.csv
contains meta-data for the 888
features (here proteins).
head(fdataCsv, n = 3)
## FBgn ProteinID FlybaseSymbol NoPeptideIDs MascotScore
## 1 FBgn0001104 CG10060 G-ialpha65A 3 179.86
## 2 FBgn0000044 CG10067 Act57B 5 222.40
## 3 FBgn0035720 CG10077 CG10077 5 219.65
## NoPeptidesQuantified PLSDA
## 1 1 PM
## 2 9 PM
## 3 3
pdataFile.csv
contains samples (here fractions) meta-data. This
simple file has been created manually.
pdataCsv
## sampleNames Fractions
## 1 X114 4/5
## 2 X115 12/13
## 3 X116 19
## 4 X117 21
The self-contained MSnSet
can now easily be generated using the
readMSnSet
constructor, providing the respective csv
file names
shown above and specifying that the data is comma-separated (with sep = ","
). Below, we call that object res
and display its content.
library("MSnbase")
res <- readMSnSet(exprsFile = f1,
featureDataFile = f2,
phenoDataFile = f3,
sep = ",")
res
## MSnSet (storageMode: lockedEnvironment)
## assayData: 888 features, 4 samples
## element names: exprs
## protocolData: none
## phenoData
## sampleNames: X114 X115 X116 X117
## varLabels: Fractions
## varMetadata: labelDescription
## featureData
## featureNames: FBgn0001104 FBgn0000044 ... FBgn0001215 (888 total)
## fvarLabels: ProteinID FlybaseSymbol ... PLSDA (6 total)
## fvarMetadata: labelDescription
## experimentData: use 'experimentData(object)'
## Annotation:
## - - - Processing information - - -
## Quantitation data loaded: Thu Jan 21 20:44:54 2021 using readMSnSet.
## MSnbase version: 2.16.1
MSnSet
classAlthough there are additional specific sub-containers for additional
meta-data (for instance to make the object MIAPE compliant), the
feature (the sub-container, or slot featureData
) and sample (the
phenoData
slot) are the most important ones. They need to meet the
following validity requirements (see figure below):
the number of row in the expression/quantitation data and feature data must be equal and the row names must match exactly, and
the number of columns in the expression/quantitation data and number of row in the sample meta-data must be equal and the column/row names must match exactly.
A detailed description of the MSnSet
class is available by typing
?MSnSet
in the R console.
The individual parts of this data object can be accessed with their respective accessor methods:
exprs(res)
,fData(res)
andpData(res)
.The readMSnSet2
function provides a simplified import workforce. It
takes a single spreadsheet as input (default is csv
) and extract the
columns identified by ecol
to create the expression data, while the
others are used as feature meta-data. ecol
can be a character
with
the respective column labels or a numeric with their indices. In the
former case, it is important to make sure that the names match
exactly. Special characters like '-'
or '('
will be transformed by
R into '.'
when the csv
file is read in. Optionally, one can also
specify a column to be used as feature names. Note that these must be
unique to guarantee the final object validity.
ecol <- paste("area", 114:117, sep = ".")
fname <- "Protein.ID"
eset <- readMSnSet2(f0, ecol, fname)
eset
## MSnSet (storageMode: lockedEnvironment)
## assayData: 888 features, 4 samples
## element names: exprs
## protocolData: none
## phenoData: none
## featureData
## featureNames: CG10060 CG10067 ... CG9983 (888 total)
## fvarLabels: Protein.ID FBgn ... pd.markers (12 total)
## fvarMetadata: labelDescription
## experimentData: use 'experimentData(object)'
## Annotation:
## - - - Processing information - - -
## MSnbase version: 2.16.1
The ecol
columns can also be queried interactively from R using the
getEcols
and grepEcols
function. The former return a character
with all column names, given a splitting character, i.e. the
separation value of the spreadsheet (typically ","
for csv
, "\t"
for tsv
, …). The latter can be used to grep a pattern of interest
to obtain the relevant column indices.
getEcols(f0, ",")
## [1] "\"Protein ID\"" "\"FBgn\""
## [3] "\"Flybase Symbol\"" "\"No. peptide IDs\""
## [5] "\"Mascot score\"" "\"No. peptides quantified\""
## [7] "\"area 114\"" "\"area 115\""
## [9] "\"area 116\"" "\"area 117\""
## [11] "\"PLS-DA classification\"" "\"Peptide sequence\""
## [13] "\"Precursor ion mass\"" "\"Precursor ion charge\""
## [15] "\"pd.2013\"" "\"pd.markers\""
grepEcols(f0, "area", ",")
## [1] 7 8 9 10
e <- grepEcols(f0, "area", ",")
readMSnSet2(f0, e)
## MSnSet (storageMode: lockedEnvironment)
## assayData: 888 features, 4 samples
## element names: exprs
## protocolData: none
## phenoData: none
## featureData
## featureNames: 1 2 ... 888 (888 total)
## fvarLabels: Protein.ID FBgn ... pd.markers (12 total)
## fvarMetadata: labelDescription
## experimentData: use 'experimentData(object)'
## Annotation:
## - - - Processing information - - -
## MSnbase version: 2.16.1
The phenoData
slot can now be updated accordingly using the
replacement functions phenoData<-
or pData<-
(see ?MSnSet
for
details).
sessionInfo()
## R version 4.0.3 (2020-10-10)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Ubuntu 18.04.5 LTS
##
## Matrix products: default
## BLAS: /home/biocbuild/bbs-3.12-bioc/R/lib/libRblas.so
## LAPACK: /home/biocbuild/bbs-3.12-bioc/R/lib/libRlapack.so
##
## locale:
## [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
## [3] LC_TIME=en_US.UTF-8 LC_COLLATE=C
## [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
## [7] LC_PAPER=en_US.UTF-8 LC_NAME=C
## [9] LC_ADDRESS=C LC_TELEPHONE=C
## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
##
## attached base packages:
## [1] grid stats4 parallel stats graphics grDevices utils
## [8] datasets methods base
##
## other attached packages:
## [1] gplots_3.1.1 msdata_0.30.0 pRoloc_1.30.0
## [4] BiocParallel_1.24.1 MLInterfaces_1.70.0 cluster_2.1.0
## [7] annotate_1.68.0 XML_3.99-0.5 AnnotationDbi_1.52.0
## [10] IRanges_2.24.1 pRolocdata_1.28.0 Rdisop_1.50.0
## [13] zoo_1.8-8 MSnbase_2.16.1 ProtGenerics_1.22.0
## [16] S4Vectors_0.28.1 mzR_2.24.1 Rcpp_1.0.6
## [19] Biobase_2.50.0 BiocGenerics_0.36.0 ggplot2_3.3.3
## [22] BiocStyle_2.18.1
##
## loaded via a namespace (and not attached):
## [1] BiocFileCache_1.14.0 plyr_1.8.6 splines_4.0.3
## [4] digest_0.6.27 foreach_1.5.1 htmltools_0.5.1
## [7] viridis_0.5.1 magick_2.6.0 magrittr_2.0.1
## [10] memoise_1.1.0 doParallel_1.0.16 mixtools_1.2.0
## [13] limma_3.46.0 recipes_0.1.15 gower_0.2.2
## [16] askpass_1.1 lpSolve_5.6.15 prettyunits_1.1.1
## [19] colorspace_2.0-0 blob_1.2.1 rappdirs_0.3.1
## [22] xfun_0.20 dplyr_1.0.3 crayon_1.3.4
## [25] hexbin_1.28.2 impute_1.64.0 survival_3.2-7
## [28] iterators_1.0.13 glue_1.4.2 gtable_0.3.0
## [31] ipred_0.9-9 zlibbioc_1.36.0 kernlab_0.9-29
## [34] scales_1.1.1 vsn_3.58.0 mvtnorm_1.1-1
## [37] DBI_1.1.1 viridisLite_0.3.0 xtable_1.8-4
## [40] progress_1.2.2 bit_4.0.4 proxy_0.4-24
## [43] mclust_5.4.7 preprocessCore_1.52.1 lava_1.6.8.1
## [46] prodlim_2019.11.13 sampling_2.9 httr_1.4.2
## [49] FNN_1.1.3 RColorBrewer_1.1-2 ellipsis_0.3.1
## [52] pkgconfig_2.0.3 farver_2.0.3 nnet_7.3-14
## [55] dbplyr_2.0.0 caret_6.0-86 tidyselect_1.1.0
## [58] labeling_0.4.2 rlang_0.4.10 reshape2_1.4.4
## [61] munsell_0.5.0 tools_4.0.3 LaplacesDemon_16.1.4
## [64] generics_0.1.0 RSQLite_2.2.2 evaluate_0.14
## [67] stringr_1.4.0 mzID_1.28.0 yaml_2.2.1
## [70] ModelMetrics_1.2.2.2 knitr_1.30 bit64_4.0.5
## [73] caTools_1.18.1 purrr_0.3.4 randomForest_4.6-14
## [76] dendextend_1.14.0 ncdf4_1.17 nlme_3.1-151
## [79] xml2_1.3.2 biomaRt_2.46.1 compiler_4.0.3
## [82] curl_4.3 e1071_1.7-4 affyio_1.60.0
## [85] tibble_3.0.5 stringi_1.5.3 highr_0.8
## [88] lattice_0.20-41 Matrix_1.3-2 vctrs_0.3.6
## [91] pillar_1.4.7 lifecycle_0.2.0 BiocManager_1.30.10
## [94] MALDIquant_1.19.3 data.table_1.13.6 bitops_1.0-6
## [97] R6_2.5.0 pcaMethods_1.82.0 affy_1.68.0
## [100] bookdown_0.21 KernSmooth_2.23-18 gridExtra_2.3
## [103] codetools_0.2-18 MASS_7.3-53 gtools_3.8.2
## [106] assertthat_0.2.1 openssl_1.4.3 withr_2.4.0
## [109] mgcv_1.8-33 hms_1.0.0 rpart_4.1-15
## [112] timeDate_3043.102 coda_0.19-4 class_7.3-17
## [115] rmarkdown_2.6 segmented_1.3-1 pROC_1.17.0.1
## [118] lubridate_1.7.9.2
Gatto, Laurent, and Kathryn S Lilley. 2012. “MSnbase – an R/Bioconductor Package for Isobaric Tagged Mass Spectrometry Data Visualization, Processing and Quantitation.” Bioinformatics 28 (2): 288–9. https://doi.org/10.1093/bioinformatics/btr645.
Martens, Lennart, Matthew Chambers, Marc Sturm, Darren Kes sner, Fredrik Levander, Jim Shofstahl, Wilfred H Tang, et al. 2010. “MzML - a Community Standard for Mass Spectrometry Data.” Molecular & Cellular Proteomics : MCP. https://doi.org/10.1074/mcp.R110.000133.
Orchard, Sandra, Luisa Montechi-Palazzi, Eric W Deutsch, Pierre-Alain Binz, Andrew R Jones, Norman Paton, Angel Pizarro, David M Creasy, Jérôme Wojcik, and Henning Hermjakob. 2007. “Five Years of Progress in the Standardization of Proteomics Data 4th Annual Spring Workshop of the Hupo-Proteomics Standards Initiative April 23-25, 2007 Ecole Nationale Supérieure (Ens), Lyon, France.” Proteomics 7 (19): 3436–40. https://doi.org/10.1002/pmic.200700658.
Pedrioli, Patrick G A, Jimmy K Eng, Robert Hubley, Mathijs Vogelzang, Eric W Deutsch, Brian Raught, Brian Pratt, et al. 2004. “A Common Open Representation of Mass Spectrometry Data and Its Application to Proteomics Research.” Nat. Biotechnol. 22 (11): 1459–66. https://doi.org/10.1038/nbt1031.