spiro
spiro: An R package for analyzing data from cardiopulmonary exercise testing - Published in JOSS (2023)
Science Score: 98.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
✓CITATION.cff file
Found CITATION.cff file -
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
✓DOI references
Found 4 DOI reference(s) in README and JOSS metadata -
✓Academic publication links
Links to: joss.theoj.org -
○Committers with academic emails
-
○Institutional organization owner
-
✓JOSS paper metadata
Published in Journal of Open Source Software
Last synced: 4 months ago
·
JSON representation
·
Repository
Work with data from cardiopulmonary exercise testing
Basic Info
- Host: GitHub
- Owner: ropensci
- License: other
- Language: R
- Default Branch: main
- Homepage: https://docs.ropensci.org/spiro/
- Size: 6.14 MB
Statistics
- Stars: 14
- Watchers: 5
- Forks: 0
- Open Issues: 0
- Releases: 12
Created over 4 years ago
· Last pushed 5 months ago
Metadata Files
Readme
Changelog
Contributing
License
Citation
Codemeta
README.Rmd
---
output: github_document
---
```{r, include = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
fig.path = "man/figures/README-",
out.width = "100%",
fig.width = 6,
fig.asp = 0.618,
dpi = 300
)
```
# spiro
[](https://www.repostatus.org/#active)
[](https://CRAN.R-project.org/package=spiro)
[](https://doi.org/10.21105/joss.05089)
[](https://github.com/ropensci/spiro/actions)
[](https://app.codecov.io/gh/ropensci/spiro)
[](https://github.com/ropensci/software-review/issues/541)
## Overview
This R package offers a fast, standardized and reproducible workflow for data
from cardiopulmonary exercise testing. It offers tools for data import,
processing, summary and visualization.
## Background
Measuring gas exchange during physical exercise is a common procedure in sports science and medicine. It allows to assess the functional limit of the cardiovascular system, evaluate the success of training interventions, and diagnose cardio-respiratory diseases. The measuring devices of cardiopulmonary exercise testing --- so-called metabolic carts --- output their data in different formats. Moreover, measured breath-by-breath data is noisy and requires post-processing. This package standardizes the import and processing of raw data from different metabolic carts.
## Installation
Install `spiro` from CRAN:
``` {r install, eval = FALSE}
install.packages("spiro")
```
Install the current development version of `spiro` from GitHub:
``` {r install-dev, eval = FALSE}
if (!require(remotes)) install.packages("remotes")
remotes::install_github("ropensci/spiro")
```
## Usage
Main functions:
* Use `spiro()` to automatically import and process raw data from
cardiopulmonary exercise testing.
* Use `spiro_summary()` for a summary of cardiopulmonary parameters (e.g., relative oxygen uptake, respiratory quotient, heart rate, ...) for each load step.
* Use `spiro_max()` to calculate maximum parameter values (e.g., VO2max).
* Use `spiro_plot()` to visualize the data as a modifiable Wassermann 9-Panel Plot.
Further functionality:
* Add external heart rate data from a .tcx file.
* Automated guessing or manual setting of exercise protocols.
* Different data filtering strategies for VO~2max~ determination (moving time averages, moving breath averages, Butterworth filters)
#### Metabolic Carts
The following metabolic carts are currently supported by `spiro`:
* Cortex
* Cosmed
* Vyntus
* ZAN
Support for further metabolic carts is planned for future releases.
## Example
```{r example, warning = FALSE, fig.width = 10, fig.height = 8}
library(spiro)
# get data path for example
file <- spiro_example("zan_gxt")
# import and process the raw data
gxt_data <- spiro(file)
# summary of parameters by load step
spiro_summary(gxt_data)
# maximum values
spiro_max(gxt_data)
# Wassermann 9-Panel Plot
spiro_plot(gxt_data)
```
## Citation
```{r citation, collapse=FALSE, comment=""}
citation("spiro")
```
## Related Work
The [whippr](https://github.com/fmmattioni/whippr) package offers a different
approach to working with data from cardiopulmonary exercise testing. It
additionally offers functions for analyzing VO2 kinetics.
## Acknowledgment
The following persons contributed to this package by providing raw data files, reviewing code and/or suggesting features:
Daniel Appelhans, Michael Beaven, James Hunter, Virgile Lecoultre, Sebastian Mühlenhoff, Manuel Ramon, Anton Schiffer, Yannick Schwarz, Adrian Swoboda, Andreas Wagner.
## Contributing
If you consider contributing to this package, read the [CONTRIBUTING.md](https://github.com/ropensci/spiro/blob/main/.github/CONTRIBUTING.md). Please note that this package is released with a [Contributor Code of Conduct](https://ropensci.org/code-of-conduct/). By contributing to this project, you agree to abide by its terms.
Owner
- Name: rOpenSci
- Login: ropensci
- Kind: organization
- Email: info@ropensci.org
- Location: Berkeley, CA
- Website: https://ropensci.org/
- Twitter: rOpenSci
- Repositories: 307
- Profile: https://github.com/ropensci
JOSS Publication
spiro: An R package for analyzing data from cardiopulmonary exercise testing
Published
January 22, 2023
Volume 8, Issue 81, Page 5089
Authors
Tags
exercise scienceCitation (CITATION.cff)
# --------------------------------------------
# CITATION file created with {cffr} R package
# See also: https://docs.ropensci.org/cffr/
# --------------------------------------------
cff-version: 1.2.0
message: 'To cite package "spiro" in publications use:'
type: software
license: MIT
title: 'spiro: Manage Data from Cardiopulmonary Exercise Testing'
version: 0.2.3.9000
doi: 10.21105/joss.05089
identifiers:
- type: doi
value: 10.32614/CRAN.package.spiro
abstract: Import, process, summarize and visualize raw data from metabolic carts.
See Robergs, Dwyer, and Astorino (2010) <https://doi.org/10.2165/11319670-000000000-00000>
for more details on data processing.
authors:
- family-names: Nolte
given-names: Simon
email: s.nolte@dshs-koeln.de
orcid: https://orcid.org/0000-0003-1643-1860
preferred-citation:
type: article
title: 'spiro: An R package for analyzing data from cardiopulmonary exercise testing'
authors:
- family-names: Nolte
given-names: Simon
email: s.nolte@dshs-koeln.de
orcid: https://orcid.org/0000-0003-1643-1860
year: '2023'
volume: '8'
issue: '81'
journal: Journal of Open Source Software
url: https://joss.theoj.org/papers/10.21105/joss.05089
doi: 10.21105/joss.05089
start: '5089'
repository: https://CRAN.R-project.org/package=spiro
repository-code: https://github.com/ropensci/spiro
url: https://docs.ropensci.org/spiro/
contact:
- family-names: Nolte
given-names: Simon
email: s.nolte@dshs-koeln.de
orcid: https://orcid.org/0000-0003-1643-1860
references:
- type: software
title: ggplot2
abstract: 'ggplot2: Create Elegant Data Visualisations Using the Grammar of Graphics'
notes: Imports
url: https://ggplot2.tidyverse.org
repository: https://CRAN.R-project.org/package=ggplot2
authors:
- family-names: Wickham
given-names: Hadley
email: hadley@posit.co
orcid: https://orcid.org/0000-0003-4757-117X
- family-names: Chang
given-names: Winston
orcid: https://orcid.org/0000-0002-1576-2126
- family-names: Henry
given-names: Lionel
- family-names: Pedersen
given-names: Thomas Lin
email: thomas.pedersen@posit.co
orcid: https://orcid.org/0000-0002-5147-4711
- family-names: Takahashi
given-names: Kohske
- family-names: Wilke
given-names: Claus
orcid: https://orcid.org/0000-0002-7470-9261
- family-names: Woo
given-names: Kara
orcid: https://orcid.org/0000-0002-5125-4188
- family-names: Yutani
given-names: Hiroaki
orcid: https://orcid.org/0000-0002-3385-7233
- family-names: Dunnington
given-names: Dewey
orcid: https://orcid.org/0000-0002-9415-4582
- family-names: Brand
given-names: Teun
name-particle: van den
orcid: https://orcid.org/0000-0002-9335-7468
year: '2025'
doi: 10.32614/CRAN.package.ggplot2
- type: software
title: xml2
abstract: 'xml2: Parse XML'
notes: Imports
url: https://xml2.r-lib.org/
repository: https://CRAN.R-project.org/package=xml2
authors:
- family-names: Wickham
given-names: Hadley
email: hadley@posit.co
- family-names: Hester
given-names: Jim
- family-names: Ooms
given-names: Jeroen
year: '2025'
doi: 10.32614/CRAN.package.xml2
- type: software
title: readxl
abstract: 'readxl: Read Excel Files'
notes: Imports
url: https://readxl.tidyverse.org
repository: https://CRAN.R-project.org/package=readxl
authors:
- family-names: Wickham
given-names: Hadley
email: hadley@posit.co
orcid: https://orcid.org/0000-0003-4757-117X
- family-names: Bryan
given-names: Jennifer
email: jenny@posit.co
orcid: https://orcid.org/0000-0002-6983-2759
year: '2025'
doi: 10.32614/CRAN.package.readxl
- type: software
title: knitr
abstract: 'knitr: A General-Purpose Package for Dynamic Report Generation in R'
notes: Imports
url: https://yihui.org/knitr/
repository: https://CRAN.R-project.org/package=knitr
authors:
- family-names: Xie
given-names: Yihui
email: xie@yihui.name
orcid: https://orcid.org/0000-0003-0645-5666
year: '2025'
doi: 10.32614/CRAN.package.knitr
- type: software
title: cowplot
abstract: 'cowplot: Streamlined Plot Theme and Plot Annotations for ''ggplot2'''
notes: Imports
url: https://wilkelab.org/cowplot/
repository: https://CRAN.R-project.org/package=cowplot
authors:
- family-names: Wilke
given-names: Claus O.
email: wilke@austin.utexas.edu
orcid: https://orcid.org/0000-0002-7470-9261
year: '2025'
doi: 10.32614/CRAN.package.cowplot
- type: software
title: digest
abstract: 'digest: Create Compact Hash Digests of R Objects'
notes: Imports
url: https://dirk.eddelbuettel.com/code/digest.html
repository: https://CRAN.R-project.org/package=digest
authors:
- family-names: Lucas
given-names: Dirk Eddelbuettel with contributions by Antoine
email: edd@debian.org
- family-names: Tuszynski
given-names: Jarek
- family-names: Bengtsson
given-names: Henrik
- family-names: Urbanek
given-names: Simon
- family-names: Frasca
given-names: Mario
- family-names: Lewis
given-names: Bryan
- family-names: Stokely
given-names: Murray
- family-names: Muehleisen
given-names: Hannes
- family-names: Murdoch
given-names: Duncan
- family-names: Hester
given-names: Jim
- family-names: Wu
given-names: Wush
- family-names: Kou
given-names: Qiang
- family-names: Onkelinx
given-names: Thierry
- family-names: Lang
given-names: Michel
- family-names: Simko
given-names: Viliam
- family-names: Hornik
given-names: Kurt
- family-names: Neal
given-names: Radford
- family-names: Bell
given-names: Kendon
- family-names: Queljoe
given-names: Matthew
name-particle: de
- family-names: Suruceanu
given-names: Ion
- family-names: Denney
given-names: Bill
- family-names: Schumacher
given-names: Dirk
- family-names: Chang
given-names: Winston
- family-names: Attali
given-names: Dean
- family-names: Chirico.
given-names: Michael
year: '2025'
doi: 10.32614/CRAN.package.digest
- type: software
title: signal
abstract: 'signal: Signal Processing'
notes: Imports
repository: https://CRAN.R-project.org/package=signal
authors:
- family-names: Ligges
given-names: Uwe
email: ligges@statistik.tu-dortmund.de
- family-names: Short
given-names: Tom
email: tshort@eprisolutions.com
- family-names: Kienzle
given-names: Paul
year: '2025'
doi: 10.32614/CRAN.package.signal
- type: software
title: testthat
abstract: 'testthat: Unit Testing for R'
notes: Suggests
url: https://testthat.r-lib.org
repository: https://CRAN.R-project.org/package=testthat
authors:
- family-names: Wickham
given-names: Hadley
email: hadley@posit.co
year: '2025'
doi: 10.32614/CRAN.package.testthat
version: '>= 3.0.0'
- type: software
title: vdiffr
abstract: 'vdiffr: Visual Regression Testing and Graphical Diffing'
notes: Suggests
url: https://vdiffr.r-lib.org/
repository: https://CRAN.R-project.org/package=vdiffr
authors:
- family-names: Henry
given-names: Lionel
email: lionel@posit.co
- family-names: Pedersen
given-names: Thomas Lin
email: thomas.pedersen@posit.co
orcid: https://orcid.org/0000-0002-5147-4711
- family-names: Luciani
given-names: T Jake
email: jake@apache.org
- family-names: Decorde
given-names: Matthieu
email: matthieu.decorde@ens-lyon.fr
- family-names: Lise
given-names: Vaudor
email: lise.vaudor@ens-lyon.fr
year: '2025'
doi: 10.32614/CRAN.package.vdiffr
- type: software
title: rmarkdown
abstract: 'rmarkdown: Dynamic Documents for R'
notes: Suggests
url: https://pkgs.rstudio.com/rmarkdown/
repository: https://CRAN.R-project.org/package=rmarkdown
authors:
- family-names: Allaire
given-names: JJ
email: jj@posit.co
- family-names: Xie
given-names: Yihui
email: xie@yihui.name
orcid: https://orcid.org/0000-0003-0645-5666
- family-names: Dervieux
given-names: Christophe
email: cderv@posit.co
orcid: https://orcid.org/0000-0003-4474-2498
- family-names: McPherson
given-names: Jonathan
email: jonathan@posit.co
- family-names: Luraschi
given-names: Javier
- family-names: Ushey
given-names: Kevin
email: kevin@posit.co
- family-names: Atkins
given-names: Aron
email: aron@posit.co
- family-names: Wickham
given-names: Hadley
email: hadley@posit.co
- family-names: Cheng
given-names: Joe
email: joe@posit.co
- family-names: Chang
given-names: Winston
email: winston@posit.co
- family-names: Iannone
given-names: Richard
email: rich@posit.co
orcid: https://orcid.org/0000-0003-3925-190X
year: '2025'
doi: 10.32614/CRAN.package.rmarkdown
- type: software
title: ggborderline
abstract: 'ggborderline: Line Plots that Pop'
notes: Suggests
url: https://wurli.github.io/ggborderline/
repository: https://CRAN.R-project.org/package=ggborderline
authors:
- family-names: Scott
given-names: Jacob
year: '2025'
doi: 10.32614/CRAN.package.ggborderline
CodeMeta (codemeta.json)
{
"@context": "https://doi.org/10.5063/schema/codemeta-2.0",
"@type": "SoftwareSourceCode",
"identifier": "spiro",
"description": "Import, process, summarize and visualize raw data from metabolic carts. See Robergs, Dwyer, and Astorino (2010) <doi:10.2165/11319670-000000000-00000> for more details on data processing. ",
"name": "spiro: Manage Data from Cardiopulmonary Exercise Testing",
"relatedLink": [
"https://docs.ropensci.org/spiro/",
"https://CRAN.R-project.org/package=spiro"
],
"codeRepository": "https://github.com/ropensci/spiro",
"issueTracker": "https://github.com/ropensci/spiro/issues",
"license": "https://spdx.org/licenses/MIT",
"version": "0.2.3.9000",
"programmingLanguage": {
"@type": "ComputerLanguage",
"name": "R",
"url": "https://r-project.org"
},
"runtimePlatform": "R version 4.4.0 (2024-04-24 ucrt)",
"provider": {
"@id": "https://cran.r-project.org",
"@type": "Organization",
"name": "Comprehensive R Archive Network (CRAN)",
"url": "https://cran.r-project.org"
},
"author": [
{
"@type": "Person",
"givenName": "Simon",
"familyName": "Nolte",
"email": "s.nolte@dshs-koeln.de",
"@id": "https://orcid.org/0000-0003-1643-1860"
}
],
"maintainer": [
{
"@type": "Person",
"givenName": "Simon",
"familyName": "Nolte",
"email": "s.nolte@dshs-koeln.de",
"@id": "https://orcid.org/0000-0003-1643-1860"
}
],
"softwareSuggestions": [
{
"@type": "SoftwareApplication",
"identifier": "testthat",
"name": "testthat",
"version": ">= 3.0.0",
"provider": {
"@id": "https://cran.r-project.org",
"@type": "Organization",
"name": "Comprehensive R Archive Network (CRAN)",
"url": "https://cran.r-project.org"
},
"sameAs": "https://CRAN.R-project.org/package=testthat"
},
{
"@type": "SoftwareApplication",
"identifier": "vdiffr",
"name": "vdiffr",
"provider": {
"@id": "https://cran.r-project.org",
"@type": "Organization",
"name": "Comprehensive R Archive Network (CRAN)",
"url": "https://cran.r-project.org"
},
"sameAs": "https://CRAN.R-project.org/package=vdiffr"
},
{
"@type": "SoftwareApplication",
"identifier": "rmarkdown",
"name": "rmarkdown",
"provider": {
"@id": "https://cran.r-project.org",
"@type": "Organization",
"name": "Comprehensive R Archive Network (CRAN)",
"url": "https://cran.r-project.org"
},
"sameAs": "https://CRAN.R-project.org/package=rmarkdown"
},
{
"@type": "SoftwareApplication",
"identifier": "ggborderline",
"name": "ggborderline",
"provider": {
"@id": "https://cran.r-project.org",
"@type": "Organization",
"name": "Comprehensive R Archive Network (CRAN)",
"url": "https://cran.r-project.org"
},
"sameAs": "https://CRAN.R-project.org/package=ggborderline"
}
],
"softwareRequirements": {
"1": {
"@type": "SoftwareApplication",
"identifier": "ggplot2",
"name": "ggplot2",
"provider": {
"@id": "https://cran.r-project.org",
"@type": "Organization",
"name": "Comprehensive R Archive Network (CRAN)",
"url": "https://cran.r-project.org"
},
"sameAs": "https://CRAN.R-project.org/package=ggplot2"
},
"2": {
"@type": "SoftwareApplication",
"identifier": "xml2",
"name": "xml2",
"provider": {
"@id": "https://cran.r-project.org",
"@type": "Organization",
"name": "Comprehensive R Archive Network (CRAN)",
"url": "https://cran.r-project.org"
},
"sameAs": "https://CRAN.R-project.org/package=xml2"
},
"3": {
"@type": "SoftwareApplication",
"identifier": "readxl",
"name": "readxl",
"provider": {
"@id": "https://cran.r-project.org",
"@type": "Organization",
"name": "Comprehensive R Archive Network (CRAN)",
"url": "https://cran.r-project.org"
},
"sameAs": "https://CRAN.R-project.org/package=readxl"
},
"4": {
"@type": "SoftwareApplication",
"identifier": "knitr",
"name": "knitr",
"provider": {
"@id": "https://cran.r-project.org",
"@type": "Organization",
"name": "Comprehensive R Archive Network (CRAN)",
"url": "https://cran.r-project.org"
},
"sameAs": "https://CRAN.R-project.org/package=knitr"
},
"5": {
"@type": "SoftwareApplication",
"identifier": "cowplot",
"name": "cowplot",
"provider": {
"@id": "https://cran.r-project.org",
"@type": "Organization",
"name": "Comprehensive R Archive Network (CRAN)",
"url": "https://cran.r-project.org"
},
"sameAs": "https://CRAN.R-project.org/package=cowplot"
},
"6": {
"@type": "SoftwareApplication",
"identifier": "digest",
"name": "digest",
"provider": {
"@id": "https://cran.r-project.org",
"@type": "Organization",
"name": "Comprehensive R Archive Network (CRAN)",
"url": "https://cran.r-project.org"
},
"sameAs": "https://CRAN.R-project.org/package=digest"
},
"7": {
"@type": "SoftwareApplication",
"identifier": "signal",
"name": "signal",
"provider": {
"@id": "https://cran.r-project.org",
"@type": "Organization",
"name": "Comprehensive R Archive Network (CRAN)",
"url": "https://cran.r-project.org"
},
"sameAs": "https://CRAN.R-project.org/package=signal"
},
"SystemRequirements": null
},
"fileSize": "6711.436KB",
"citation": [
{
"@type": "ScholarlyArticle",
"datePublished": "2023",
"author": [
{
"@type": "Person",
"givenName": "Simon",
"familyName": "Nolte"
}
],
"name": "spiro: An R package for analyzing data from cardiopulmonary exercise testing",
"identifier": "10.21105/joss.05089",
"url": "https://joss.theoj.org/papers/10.21105/joss.05089",
"pagination": "5089",
"@id": "https://doi.org/10.21105/joss.05089",
"sameAs": "https://doi.org/10.21105/joss.05089",
"isPartOf": {
"@type": "PublicationIssue",
"issueNumber": "81",
"datePublished": "2023",
"isPartOf": {
"@type": [
"PublicationVolume",
"Periodical"
],
"volumeNumber": "8",
"name": "Journal of Open Source Software"
}
}
}
],
"releaseNotes": "https://github.com/ropensci/spiro/blob/master/NEWS.md",
"readme": "https://github.com/ropensci/spiro/blob/main/README.md",
"contIntegration": [
"https://github.com/ropensci/spiro/actions",
"https://app.codecov.io/gh/ropensci/spiro"
],
"developmentStatus": "https://www.repostatus.org/#active",
"review": {
"@type": "Review",
"url": "https://github.com/ropensci/software-review/issues/541",
"provider": "https://ropensci.org"
}
}
GitHub Events
Total
- Release event: 2
- Watch event: 2
- Delete event: 1
- Push event: 5
- Pull request event: 2
- Create event: 3
Last Year
- Release event: 2
- Watch event: 2
- Delete event: 1
- Push event: 5
- Pull request event: 2
- Create event: 3
Committers
Last synced: 5 months ago
Top Committers
| Name | Commits | |
|---|---|---|
| Simon Nolte | 8****t | 379 |
| Maëlle Salmon | m****n@y****e | 1 |
Issues and Pull Requests
Last synced: 4 months ago
All Time
- Total issues: 1
- Total pull requests: 12
- Average time to close issues: about 1 month
- Average time to close pull requests: 4 days
- Total issue authors: 1
- Total pull request authors: 2
- Average comments per issue: 1.0
- Average comments per pull request: 0.0
- Merged pull requests: 12
- Bot issues: 0
- Bot pull requests: 0
Past Year
- Issues: 0
- Pull requests: 2
- Average time to close issues: N/A
- Average time to close pull requests: 11 minutes
- Issue authors: 0
- Pull request authors: 1
- Average comments per issue: 0
- Average comments per pull request: 0.0
- Merged pull requests: 2
- Bot issues: 0
- Bot pull requests: 0
Top Authors
Issue Authors
- thomasp85 (1)
Pull Request Authors
- smnnlt (13)
- maelle (2)
Top Labels
Issue Labels
Pull Request Labels
Packages
- Total packages: 1
-
Total downloads:
- cran 248 last-month
- Total dependent packages: 0
- Total dependent repositories: 0
- Total versions: 5
- Total maintainers: 1
cran.r-project.org: spiro
Manage Data from Cardiopulmonary Exercise Testing
- Homepage: https://github.com/ropensci/spiro
- Documentation: http://cran.r-project.org/web/packages/spiro/spiro.pdf
- License: MIT + file LICENSE
-
Latest release: 0.2.3
published 10 months ago
Rankings
Stargazers count: 17.9%
Forks count: 28.8%
Dependent packages count: 29.8%
Dependent repos count: 35.5%
Average: 37.6%
Downloads: 76.3%
Maintainers (1)
Last synced:
4 months ago
Dependencies
DESCRIPTION
cran
- cowplot * imports
- digest * imports
- ggplot2 * imports
- knitr * imports
- readxl * imports
- signal * imports
- xml2 * imports
- ggborderline * suggests
- rmarkdown * suggests
- testthat >= 3.0.0 suggests
.github/workflows/R-CMD-check.yaml
actions
- actions/checkout v3 composite
- r-lib/actions/check-r-package v2 composite
- r-lib/actions/setup-pandoc v2 composite
- r-lib/actions/setup-r v2 composite
- r-lib/actions/setup-r-dependencies v2 composite
.github/workflows/test-coverage.yaml
actions
- actions/checkout v3 composite
- actions/upload-artifact v3 composite
- r-lib/actions/setup-r v2 composite
- r-lib/actions/setup-r-dependencies v2 composite
