Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

spiro: Manage Data from Cardiopulmonary Exercise Testing #541

Closed
13 of 29 tasks
smnnlt opened this issue Jun 9, 2022 · 49 comments
Closed
13 of 29 tasks

spiro: Manage Data from Cardiopulmonary Exercise Testing #541

smnnlt opened this issue Jun 9, 2022 · 49 comments
Assignees

Comments

@smnnlt
Copy link

smnnlt commented Jun 9, 2022

Date accepted: 2022-08-17
Submitting Author Name: Simon Nolte
Submitting Author Github Handle: @smnnlt
Repository: https://github.com/smnnlt/spiro
Version submitted: 0.0.5
Submission type: Standard
Editor: @melvidoni
Reviewers: @jameshunterbr, @manuramon

Due date for @jameshunterbr: 2022-07-11

Due date for @manuramon: 2022-07-22

Archive: TBD
Version accepted: TBD

Language: en


  • Paste the full DESCRIPTION file inside a code block below:
Package: spiro
Title: Manage Data from Cardiopulmonary Exercise Testing
Version: 0.0.5
Authors@R: 
    person(given = "Simon",
           family = "Nolte",
           role = c("aut", "cre"),
           email = "s.nolte@dshs-koeln.de",
           comment = c(ORCID = "0000-0003-1643-1860"))
Description: Import, process, summarize and visualize raw data from 
    metabolic carts.
License: MIT + file LICENSE
URL: https://github.com/smnnlt/spiro, https://smnnlt.github.io/spiro/
BugReports: https://github.com/smnnlt/spiro/issues
Encoding: UTF-8
LazyData: true
Roxygen: list(markdown = TRUE)
RoxygenNote: 7.2.0
Imports: 
    ggplot2,
    xml2,
    readxl,
    knitr,
    cowplot,
    digest,
    signal
Suggests: 
    testthat (>= 3.0.0),
    rmarkdown,
    ggborderline
VignetteBuilder: knitr
Config/testthat/edition: 3

Scope

  • Please indicate which category or categories from our package fit policies this package falls under: (Please check an appropriate box below. If you are unsure, we suggest you make a pre-submission inquiry.):

    • data retrieval
    • data extraction
    • data munging
    • data deposition
    • data validation and testing
    • workflow automation
    • version control
    • citation management and bibliometrics
    • scientific software wrappers
    • field and lab reproducibility tools
    • database software bindings
    • geospatial data
    • text analysis
  • Explain how and why the package falls under these categories (briefly, 1-2 sentences):

The spiro package allows to read and process data from raw data files of different metabolic carts.

  • Who is the target audience and what are scientific applications of this package?

This package is primarily written for researchers in exercise science, who want to make their analysis of cardiopulmonary exercise testing more standardized, reproducible and faster. It may also be used in a commercial context (e.g., training diagnostics business).

The whippr package has a different approach to the same problem. Compared to whippr, spiro has a more automated and simpler data workflow (basically one function for reading and processing data, and one function for summarizing or plotting). spiro has several relevant additional features, that whippr does not have: Automated detection and manual generation of exercise test protocols; data summary by load steps; adding and synchronizing external heart rate data; import of raw data file meta data; advanced data filtering methods (e.g., Butterworth filters; moving breath averages); Wasserman 9-Panel-Plots. Compared to whippr, the spiro package does not offer methods for VO2 kinetics analysis and automated outlier removal.

This package works with cardiopulmonary exercise data, which is per se sensitive health data. Meta data from the original raw data files is read and anonymized by default (with the exception of data on body mass, which is necessary to perform certain calculations of variables). The anonymization can optionally be deactivated by means of a function argument [spiro(anonymize = FALSE)], so that meta data is saved alongside the processed data. This may be helpful in some settings when there is no intent to share the data. Sharing of the resulting data in such situations could potentially reveal personal information, which is why this option is not activated by default.

  • If you made a pre-submission inquiry, please paste the link to the corresponding issue, forum post, or other discussion, or @tag the editor you contacted.

#537

  • Explain reasons for any pkgcheck items which your package is unable to pass.

Technical checks

Confirm each of the following by checking the box.

This package:

Publication options

  • Do you intend for this package to go on CRAN?

  • Do you intend for this package to go on Bioconductor?

  • Do you wish to submit an Applications Article about your package to Methods in Ecology and Evolution? If so:

MEE Options
  • The package is novel and will be of interest to the broad readership of the journal.
  • The manuscript describing the package is no longer than 3000 words.
  • You intend to archive the code for the package in a long-term repository which meets the requirements of the journal (see MEE's Policy on Publishing Code)
  • (Scope: Do consider MEE's Aims and Scope for your manuscript. We make no guarantee that your manuscript will be within MEE scope.)
  • (Although not required, we strongly recommend having a full manuscript prepared when you submit here.)
  • (Please do not submit your package separately to Methods in Ecology and Evolution)

Code of conduct

@ropensci-review-bot
Copy link
Collaborator

Thanks for submitting to rOpenSci, our editors and @ropensci-review-bot will reply soon. Type @ropensci-review-bot help for help.

@ropensci-review-bot
Copy link
Collaborator

🚀

Editor check started

👋

@ropensci-review-bot
Copy link
Collaborator

Checks for spiro (v0.0.5)

git hash: 92301b28

  • ✔️ Package name is available
  • ✔️ has a 'codemeta.json' file.
  • ✔️ has a 'contributing' file.
  • ✔️ uses 'roxygen2'.
  • ✔️ 'DESCRIPTION' has a URL field.
  • ✔️ 'DESCRIPTION' has a BugReports field.
  • ✔️ Package has at least one HTML vignette
  • ✖️ These functions do not have examples: [bw_filter, get_features, get_testtype, guess_device, knit_print.spiro, print.spiro, spiro_import_cortex, spiro_import_cosmed, spiro_import_vyntus, spiro_import_zan, spiro_interpolate, spiro_smooth].
  • ✖️ Function names are duplicated in other packages
  • ✔️ Package has continuous integration checks.
  • ✔️ Package coverage is 91.3%.
  • ✔️ R CMD check found no errors.
  • ✔️ R CMD check found no warnings.

Important: All failing checks above must be addressed prior to proceeding

Package License: MIT + file LICENSE


1. Package Dependencies

Details of Package Dependency Usage (click to open)

The table below tallies all function calls to all packages ('ncalls'), both internal (r-base + recommended, along with the package itself), and external (imported and suggested packages). 'NA' values indicate packages to which no identified calls to R functions could be found. Note that these results are generated by an automated code-tagging system which may not be entirely accurate.

type package ncalls
internal base 311
internal spiro 139
internal utils 121
internal stats 55
internal mgcv 1
imports ggplot2 51
imports xml2 9
imports readxl 6
imports signal 2
imports cowplot 1
imports knitr NA
imports digest NA
suggests testthat NA
suggests rmarkdown NA
suggests ggborderline NA
linking_to NA NA

Click below for tallies of functions used in each package. Locations of each call within this package may be generated locally by running 's <- pkgstats::pkgstats(<path/to/repo>)', and examining the 'external_calls' table.

base

c (57), data.frame (24), file (23), list (18), which (16), as.numeric (13), nrow (12), max (10), seq_along (10), attr (8), raw (8), rep.int (8), round (7), length (6), diff (5), lapply (5), range (5), vapply (5), as.data.frame (4), cbind (4), names (4), switch (4), drop (3), for (3), is.na (3), suppressWarnings (3), colnames (2), do.call (2), mean (2), min (2), numeric (2), rep (2), rev (2), rownames (2), split (2), strsplit (2), suppressMessages (2), unique (2), anyDuplicated (1), apply (1), as.character (1), character (1), duplicated (1), factor (1), grepl (1), levels (1), list.files (1), ls (1), mapply (1), paste0 (1), rbind (1), row.names (1), seq_len (1), seq.int (1), sum (1), system.file (1), unlist (1)

spiro

get_data (29), get_meta (10), spiro_smooth (10), get_sex (4), to_seconds (4), to_number (3), add_bodymass (2), add_protocol (2), bw_smooth_extract (2), calo.internal (2), check_bb (2), dupl (2), get_id (2), get_smooth_data (2), get_wrongcol_string (2), getstepmeans (2), gettime (2), hr_import (2), import_xml (2), replace_intna (2), smooth_match (2), spiro_import (2), spiro_interpolate (2), spiro_interpolate.internal (2), spiro_plot.guess_units (2), spiro_plot.internal (2), add_hr (1), bw_filter (1), calo (1), const (1), get_features (1), get_protocol (1), get_testtype (1), guess_device (1), hr_interpolate (1), knit_print.spiro (1), mavg (1), pre (1), print.spiro (1), set_protocol (1), set_protocol_manual (1), set_protocol_manual.data.frame (1), set_protocol_manual.default (1), spiro (1), spiro_anonymize (1), spiro_example (1), spiro_import_cortex (1), spiro_import_cosmed (1), spiro_import_vyntus (1), spiro_import_zan (1), spiro_max (1), spiro_plot (1), spiro_plot_EQ (1), spiro_plot_EQCO2 (1), spiro_plot_HR (1), spiro_plot_Pet (1), spiro_plot_RER (1), spiro_plot_VE (1), spiro_plot_vent (1), spiro_plot_VO2 (1), spiro_plot_vslope (1), spiro_smooth.internal (1), spiro_summary (1), steps (1), theme_spiro (1)

utils

data (106), read.delim (7), head (5), read.csv (3)

stats

smooth (20), time (13), approx (7), df (7), reshape (5), filter (2), end (1)

ggplot2

aes (20), ggplot (8), labs (7), scale_colour_manual (5), scale_y_continuous (3), sec_axis (3), aes_ (2), scale_color_manual (1), scale_fill_manual (1), theme_minimal (1)

xml2

xml_find_all (3), xml_text (3), read_xml (2), xml_children (1)

readxl

read_excel (6)

signal

butter (1), filtfilt (1)

cowplot

plot_grid (1)

mgcv

s (1)

NOTE: Some imported packages appear to have no associated function calls; please ensure with author that these 'Imports' are listed appropriately.


2. Statistical Properties

This package features some noteworthy statistical properties which may need to be clarified by a handling editor prior to progressing.

Details of statistical properties (click to open)

The package has:

  • code in R (100% in 15 files) and
  • 1 authors
  • 2 vignettes
  • no internal data file
  • 7 imported packages
  • 31 exported functions (median 20 lines of code)
  • 103 non-exported functions in R (median 15 lines of code)

Statistical properties of package structure as distributional percentiles in relation to all current CRAN packages
The following terminology is used:

  • loc = "Lines of Code"
  • fn = "function"
  • exp/not_exp = exported / not exported

All parameters are explained as tooltips in the locally-rendered HTML version of this report generated by the checks_to_markdown() function

The final measure (fn_call_network_size) is the total number of calls between functions (in R), or more abstract relationships between code objects in other languages. Values are flagged as "noteworthy" when they lie in the upper or lower 5th percentile.

measure value percentile noteworthy
files_R 15 73.0
files_vignettes 2 85.7
files_tests 11 91.7
loc_R 1563 79.1
loc_vignettes 208 50.8
loc_tests 275 62.3
num_vignettes 2 89.2
n_fns_r 134 83.0
n_fns_r_exported 31 79.2
n_fns_r_not_exported 103 84.4
n_fns_per_file_r 5 67.1
num_params_per_fn 2 11.9
loc_per_fn_r 16 49.2
loc_per_fn_r_exp 20 46.7
loc_per_fn_r_not_exp 15 49.5
rel_whitespace_R 17 77.3
rel_whitespace_vignettes 37 54.2
rel_whitespace_tests 18 55.9
doclines_per_fn_exp 32 36.7
doclines_per_fn_not_exp 0 0.0 TRUE
fn_call_network_size 124 82.6

2a. Network visualisation

Click to see the interactive network visualisation of calls between objects in package


3. goodpractice and other checks

Details of goodpractice checks (click to open)

3a. Continuous Integration Badges

R-CMD-check

GitHub Workflow Results

id name conclusion sha run_number date
2462665426 pages build and deployment success 33cc31 26 2022-06-08
2459834392 pkgdown success 92301b 68 2022-06-08
2459834396 R-CMD-check failure 92301b 40 2022-06-08
2459834394 test-coverage success 92301b 39 2022-06-08

3b. goodpractice results

R CMD check with rcmdcheck

rcmdcheck found no errors, warnings, or notes

Test coverage with covr

Package coverage: 91.29

Cyclocomplexity with cyclocomp

No functions have cyclocomplexity >= 15

Static code analyses with lintr

lintr found no issues with this package!


4. Other Checks

Details of other checks (click to open)

✖️ The following 4 function names are duplicated in other packages:

    • const from arpr, CMLS, labdsv, sketch, timereg
    • get_id from CVXR, epicontacts, eventr, IOHanalyzer, panelr, rbenvo, rmonad, seqmagick
    • pre from DAMisc, html5, htmltools, pre, supernova, yonder
    • steps from amt, ddpcr, fitbitr, shiny.semantic


Package Versions

package version
pkgstats 0.0.4.75
pkgcheck 0.0.3.60


Editor-in-Chief Instructions:

Processing may not proceed until the items marked with ✖️ have been resolved.

@smnnlt
Copy link
Author

smnnlt commented Jun 9, 2022

Hi, I have added examples and renamed the functions that may lead to namespace conflicts.

@mpadge
Copy link
Member

mpadge commented Jun 9, 2022

Thanks @smnnlt , we've recently added an ability for submitting authors to directly call ˋ@ropensci-review-bot check packageˋ. Feel free to give that a try, to re-run the checks. (You'd get to be the first author to do so 🚀)

@smnnlt
Copy link
Author

smnnlt commented Jun 9, 2022

@ropensci-review-bot check package

@ropensci-review-bot
Copy link
Collaborator

Thanks, about to send the query.

@ropensci-review-bot
Copy link
Collaborator

🚀

Editor check started

👋

@ropensci-review-bot
Copy link
Collaborator

Checks for spiro (v0.0.5.9000)

git hash: b5db6e6e

  • ✔️ Package name is available
  • ✔️ has a 'codemeta.json' file.
  • ✔️ has a 'contributing' file.
  • ✔️ uses 'roxygen2'.
  • ✔️ 'DESCRIPTION' has a URL field.
  • ✔️ 'DESCRIPTION' has a BugReports field.
  • ✔️ Package has at least one HTML vignette
  • ✔️ All functions have examples.
  • ✔️ Package has continuous integration checks.
  • ✔️ Package coverage is 91.3%.
  • ✔️ R CMD check found no errors.
  • ✔️ R CMD check found no warnings.

Package License: MIT + file LICENSE


1. Package Dependencies

Details of Package Dependency Usage (click to open)

The table below tallies all function calls to all packages ('ncalls'), both internal (r-base + recommended, along with the package itself), and external (imported and suggested packages). 'NA' values indicate packages to which no identified calls to R functions could be found. Note that these results are generated by an automated code-tagging system which may not be entirely accurate.

type package ncalls
internal base 311
internal spiro 139
internal utils 121
internal stats 56
internal mgcv 1
imports ggplot2 51
imports xml2 9
imports readxl 6
imports signal 2
imports cowplot 1
imports knitr NA
imports digest NA
suggests testthat NA
suggests rmarkdown NA
suggests ggborderline NA
linking_to NA NA

Click below for tallies of functions used in each package. Locations of each call within this package may be generated locally by running 's <- pkgstats::pkgstats(<path/to/repo>)', and examining the 'external_calls' table.

base

c (57), data.frame (24), file (23), list (18), which (16), as.numeric (13), nrow (12), max (10), seq_along (10), attr (8), raw (8), rep.int (8), round (7), length (6), diff (5), lapply (5), range (5), vapply (5), as.data.frame (4), cbind (4), names (4), switch (4), drop (3), for (3), is.na (3), suppressWarnings (3), colnames (2), do.call (2), mean (2), min (2), numeric (2), rep (2), rev (2), rownames (2), split (2), strsplit (2), suppressMessages (2), unique (2), anyDuplicated (1), apply (1), as.character (1), character (1), duplicated (1), factor (1), grepl (1), levels (1), list.files (1), ls (1), mapply (1), paste0 (1), rbind (1), row.names (1), seq_len (1), seq.int (1), sum (1), system.file (1), unlist (1)

spiro

get_data (29), get_meta (10), spiro_smooth (10), get_sex (4), to_seconds (4), add_bodymass (2), add_protocol (2), bw_smooth_extract (2), calo.internal (2), check_bb (2), dupl (2), get_anonid (2), get_smooth_data (2), get_wrongcol_string (2), getstepmeans (2), gettime (2), hr_import (2), import_xml (2), replace_intna (2), smooth_match (2), spiro_import (2), spiro_interpolate (2), spiro_interpolate.internal (2), spiro_plot.guess_units (2), spiro_plot.internal (2), to_number (2), add_hr (1), bw_filter (1), calo (1), get_features (1), get_protocol (1), get_testtype (1), guess_device (1), hr_interpolate (1), knit_print.spiro (1), mavg (1), print.spiro (1), pt_const (1), pt_pre (1), pt_steps (1), pt_wu (1), set_protocol (1), set_protocol_manual (1), set_protocol_manual.data.frame (1), set_protocol_manual.default (1), spiro (1), spiro_anonymize (1), spiro_example (1), spiro_import_cortex (1), spiro_import_cosmed (1), spiro_import_vyntus (1), spiro_import_zan (1), spiro_max (1), spiro_plot (1), spiro_plot_EQ (1), spiro_plot_EQCO2 (1), spiro_plot_HR (1), spiro_plot_Pet (1), spiro_plot_RER (1), spiro_plot_VE (1), spiro_plot_vent (1), spiro_plot_VO2 (1), spiro_plot_vslope (1), spiro_smooth.internal (1), spiro_summary (1), theme_spiro (1)

utils

data (106), read.delim (7), head (5), read.csv (3)

stats

smooth (20), time (13), approx (7), df (7), reshape (5), filter (2), dt (1), end (1)

ggplot2

aes (20), ggplot (8), labs (7), scale_colour_manual (5), scale_y_continuous (3), sec_axis (3), aes_ (2), scale_color_manual (1), scale_fill_manual (1), theme_minimal (1)

xml2

xml_find_all (3), xml_text (3), read_xml (2), xml_children (1)

readxl

read_excel (6)

signal

butter (1), filtfilt (1)

cowplot

plot_grid (1)

mgcv

s (1)

NOTE: Some imported packages appear to have no associated function calls; please ensure with author that these 'Imports' are listed appropriately.


2. Statistical Properties

This package features some noteworthy statistical properties which may need to be clarified by a handling editor prior to progressing.

Details of statistical properties (click to open)

The package has:

  • code in R (100% in 15 files) and
  • 1 authors
  • 2 vignettes
  • no internal data file
  • 7 imported packages
  • 23 exported functions (median 14 lines of code)
  • 111 non-exported functions in R (median 16 lines of code)

Statistical properties of package structure as distributional percentiles in relation to all current CRAN packages
The following terminology is used:

  • loc = "Lines of Code"
  • fn = "function"
  • exp/not_exp = exported / not exported

All parameters are explained as tooltips in the locally-rendered HTML version of this report generated by the checks_to_markdown() function

The final measure (fn_call_network_size) is the total number of calls between functions (in R), or more abstract relationships between code objects in other languages. Values are flagged as "noteworthy" when they lie in the upper or lower 5th percentile.

measure value percentile noteworthy
files_R 15 73.0
files_vignettes 2 85.7
files_tests 11 91.7
loc_R 1563 79.1
loc_vignettes 208 50.8
loc_tests 275 62.3
num_vignettes 2 89.2
n_fns_r 134 83.0
n_fns_r_exported 23 71.4
n_fns_r_not_exported 111 85.7
n_fns_per_file_r 5 67.1
num_params_per_fn 3 33.6
loc_per_fn_r 16 49.2
loc_per_fn_r_exp 14 33.2
loc_per_fn_r_not_exp 16 52.7
rel_whitespace_R 17 77.2
rel_whitespace_vignettes 37 54.2
rel_whitespace_tests 18 55.9
doclines_per_fn_exp 40 50.1
doclines_per_fn_not_exp 0 0.0 TRUE
fn_call_network_size 124 82.6

2a. Network visualisation

Click to see the interactive network visualisation of calls between objects in package


3. goodpractice and other checks

Details of goodpractice checks (click to open)

3a. Continuous Integration Badges

R-CMD-check

GitHub Workflow Results

id name conclusion sha run_number date
2468348888 pages build and deployment success cd779d 27 2022-06-09
2468334160 pkgdown success b5db6e 70 2022-06-09
2468334164 R-CMD-check failure b5db6e 42 2022-06-09
2468334158 test-coverage success b5db6e 41 2022-06-09

3b. goodpractice results

R CMD check with rcmdcheck

rcmdcheck found no errors, warnings, or notes

Test coverage with covr

Package coverage: 91.29

Cyclocomplexity with cyclocomp

No functions have cyclocomplexity >= 15

Static code analyses with lintr

lintr found the following 1 potential issues:

message number of times
Lines should not be more than 80 characters. 1


Package Versions

package version
pkgstats 0.0.4.75
pkgcheck 0.0.3.60


Editor-in-Chief Instructions:

This package is in top shape and may be passed on to a handling editor

@emilyriederer
Copy link

Hi @smnnlt ! Thank you for the full submission and your proactive work addressing the bots feedback. I'm currently seeking a handling editor and hope to kick-off the full review soon.

@emilyriederer
Copy link

@ropensci-review-bot assign @melvidoni as editor

@ropensci-review-bot
Copy link
Collaborator

Assigned! @melvidoni is now the editor

@melvidoni
Copy link
Contributor

@ropensci-review-bot seeking reviewers

@ropensci-review-bot
Copy link
Collaborator

Please add this badge to the README of your package repository:

[![Status at rOpenSci Software Peer Review](https://badges.ropensci.org/541_status.svg)](https://github.com/ropensci/software-review/issues/541)

Furthermore, if your package does not have a NEWS.md file yet, please create one to capture the changes made during the review process. See https://devguide.ropensci.org/releasing.html#news

@melvidoni
Copy link
Contributor

I'm having some issues with finding reviewers. Please bear with me.

@melvidoni
Copy link
Contributor

@ropensci-review-bot assign @jameshunterbr as reviewer

@ropensci-review-bot
Copy link
Collaborator

@jameshunterbr added to the reviewers list. Review due date is 2022-07-11. Thanks @jameshunterbr for accepting to review! Please refer to our reviewer guide.

@ropensci-review-bot
Copy link
Collaborator

@jameshunterbr: If you haven't done so, please fill this form for us to update our reviewers records.

@melvidoni
Copy link
Contributor

@smnnlt Just to let you know, I'm having trouble finding a second reviewer. I'll keep trying, but please bear with me.

@melvidoni
Copy link
Contributor

@ropensci-review-bot assign @manuramon as reviewer

@ropensci-review-bot
Copy link
Collaborator

@manuramon added to the reviewers list. Review due date is 2022-07-20. Thanks @manuramon for accepting to review! Please refer to our reviewer guide.

@ropensci-review-bot
Copy link
Collaborator

@manuramon: If you haven't done so, please fill this form for us to update our reviewers records.

@melvidoni
Copy link
Contributor

@ropensci-review-bot submit review #541 (comment) time 4

@ropensci-review-bot
Copy link
Collaborator

Logged review for manuramon (hours: 4)

@melvidoni
Copy link
Contributor

@jameshunterbr You have to add a comment with the review completed as the templated, as the one we just lodged above.

You have to follow the review template which is in point 7.1 of the reviewing guide. I can't open the file you uploaded.

@smnnlt
Copy link
Author

smnnlt commented Jul 29, 2022

Hi,

I've started working on changes in response to the comments in the dev-branch of the package. I'll wait for @jameshunterbr to submit the review in the desired form before I'll respond to all comments here.

@melvidoni
Copy link
Contributor

@jameshunterbr Please upload the review in the correct format.

@melvidoni
Copy link
Contributor

@smnnlt I do not think @jameshunterbr will be updating the review. Can you access them? Can you please provide the answers here?

@manuramon
Copy link

manuramon commented Aug 5, 2022

Hi @melvidoni and @smnnlt , I paste below the review submitted by @jameshunterbr in the zip file, in case it helps you. If finally @jameshunterbr uploads the review in a proper format, I will remove this comment.

All the best

08/17/22: edited (removed) as @jameshunterbr added his review.

@jameshunterbr
Copy link

Package Review

*Please check off boxes as applicable, and elaborate in comments below. Your review is not limited to these topics, as described in the reviewer guide*

  • Briefly describe any working relationship you have (had) with the package authors.

  • As the reviewer I confirm that there are no conflicts of interest](https://devguide.ropensci.org/policies.html#coi)) for me to review this work (if you are unsure whether you are in conflict, please speak to your editor before starting your review).

Documentation

The package includes all the following forms of documentation:

  • [X ] A statement of need: clearly stating problems the software is designed to solve and its target audience in README

  • [X ] Installation instructions: for the development version of package and any non-standard dependencies in README

  • Vignette(s): demonstrating major functionality that runs successfully locally

  • [X ] Function Documentation: for all exported functions

  • [X ] Examples: (that run successfully locally) for all exported functions

  • Community guidelines: including contribution guidelines in the README or CONTRIBUTING, and DESCRIPTION with URL, BugReports and Maintainer (which may be autogenerated via Authors@R).

Functionality

  • [X ] Installation: Installation succeeds as documented.

  • Functionality: Any functional claims of the software been confirmed.

  • Performance: Any performance claims of the software been confirmed.

  • Automated tests: Unit tests cover essential functions of the package and a reasonable range of inputs and conditions. All tests pass on the local machine.

  • Packaging guidelines: The package conforms to the rOpenSci packaging guidelines.

Estimated hours spent reviewing:6

  • [X ] Should the author(s) deem it appropriate, I agree to be acknowledged as a package reviewer ("rev" role) in the package DESCRIPTION file.

Review Comments

  1. My first observation is that all the functions listed in the main help screen have not yet been programmed. So either those that are unfinished should be removed and re-inserted in a later version when they are completed.

  2. Likewise, there are no vignettes and there should be. In the README file you have examples, but they should be more complete so that someone in some outlying NHS locale can use them without constant referral to you.

  3. In the newest version, the response to the installation command (remotes::install_github("smnnlt/spiro@v0.0.5") I received is the following:

URL '/help/library/spiro/html/00Index.html' not found

However, if I return to the 0.0.5 "stable version", the package help screen appears.

As well, the request for help on the spiro() command failed in the new version (xx.9000):

URL '/help/library/spiro/help/spiro' not found

Likewise, the 0.0.5 version produces the help screen for the spiro() command

  1. You have some commands with very common command names like "pre" and "steps". I would rename these to something more specific to your project to avoid conflicts with other packages.

  2. Regarding tests, they appear to cover the principal functions of the package and are complete. However, my system is not testing the coverage for some reason. Sorry.

@jameshunterbr
Copy link

jameshunterbr commented Aug 7, 2022 via email

@melvidoni
Copy link
Contributor

@smnnlt can you please proceed now?
@manuramon and @jameshunterbr thank you both.

@smnnlt
Copy link
Author

smnnlt commented Aug 8, 2022

Hi @manuramon @jameshunterbr

Thank you very much for your reviews! I'll respond to all issues raised by each report:

Response to @manuramon

As a suggestion, some of the examples show the functionality of the functions without assigning the output to a target, which results in printing the entire (truncated) database on the screen. In my opinion, I think it would be preferable to display only the header of that output. An alternative solution could be to modify the print.spiro function to show only a set of rows.

Thanks for the comment. I have rewritten the examples to to print only truncated output using the head() function (ropensci/spiro@185d41c).

Package testing with pkgcheck or goodpractice::gp result in some warnings on unit tests (81% of code lines are covered by test) and length of code lines in vignette files. The pkgcheck function has also retuned a R CMD check error in the DESCRIPTION file -> Required fields missing or empty:'Author' 'Maintainer'

I shortened the code lines in the vignettes (ropensci/spiro@32597b5). I do not know the source for the R CMD error, since devtools::check() and R CMD check via CI do not throw any errors.

Functions included in the package works as expected. A suggestion for spiro_plot function would be to include and argument to define the layout of the plot. I think it is easy to implement and could help to obtain graphs in a desirable layout (3x3 by default), especially when a subset of the 9 graphs is plotted.

This is a great idea! I have added an argument grid_args to the spiro_plot() function, which passes arguments to the internal cowplot::plot_grid() call (ropensci/spiro@5358f33). This allows to modify the layout of the plot arrangement (e.g. size, labels, alignment).

A doubt about the functionality of the package is whether the functions allow to vectorize the actions across participants. If I understood correctly, the example databases are data measured on the same individual (one only) and, for example, the correction for body mass is done by giving the body mass data of this individual. Is it possible to read databases containing information from several individuals and work with the functions per individual? Maybe this question does not make sense and in this field it is usual to work with each file separately.

You're completely right, the example database is only data for a single individual and in some cases the user may want to work with data from several individuals at once. The spiro package does currently not support native vectorization, but such functionality is easy to achieve using packages for vectorization such as {purrr}. For example, the case you mentioned (simultaneously vectorizing over individuals' data files and body mass data) could be dealt with purrr::map2(.x = list_of_rawdata, .y = list_of_bodymass, .f = spiro). I thought about adding such an example to the vignettes (or creating a new one), but I don't want the package to have a dependency on {purrr}. I may write this use case up in a blog post or embedded it into the article I plan to submit to JOSS.

Response to @jameshunterbr

My first observation is that all the functions listed in the main help screen have not yet been programmed. So either those that are unfinished should be removed and re-inserted in a later version when they are completed.

All exported functions should now have documentation pages including examples (ropensci/spiro@cfb64f1).

Likewise, there are no vignettes and there should be. In the README file you have examples, but they should be more complete so that someone in some outlying NHS locale can use them without constant referral to you.

The package has two vignettes (also available on its website). To be able to view them locally, be sure to state build_vignettes = TRUE when running remotes::install_github(). I have added some more context to the README (ropensci/spiro@68e739a). Further examples can be found in the vignettes.

In the newest version, the response to the installation command remotes::install_github("smnnlt/spiro@v0.0.5") I received is the following: URL '/help/library/spiro/html/00Index.html' not found. However, if I return to the 0.0.5 "stable version", the package help screen appears. As well, the request for help on the spiro() command failed in the new version (xx.9000): URL '/help/library/spiro/help/spiro' not found.

I'm sorry, but I could not reproduce these issues. On my devices, the package successfully builds the documentation pages when being installed.

You have some commands with very common command names like "pre" and "steps". I would rename these to something more specific to your project to avoid conflicts with other packages.

Thank for pointing out this important issue! I have renamed the functions that may cause name conflicts with popular packages (ropensci/spiro@0c7b2ed & ropensci/spiro@0199249).

Regarding tests, they appear to cover the principal functions of the package and are complete. However, my system is not testing the coverage for some reason. Sorry.

That's no problem. You may visit the project's Codecov page to get an impression on the package's code coverage.

Thanks again for both of your reports @manuramon @jameshunterbr . I have added you to the DESCRIPTION as package reviewers (ropensci/spiro@a980365). If you're fine with it, I would also add you to the 'Acknowledgement' section in the README.

@melvidoni
Copy link
Contributor

@ropensci-review-bot submit review time 4

@ropensci-review-bot
Copy link
Collaborator

Logged review for jameshunterbr (hours: 4)

@melvidoni
Copy link
Contributor

Dear @jameshunterbr and @manuramon can you please check the changes on the post above? Let me know what you think.

@jameshunterbr
Copy link

I have looked through the new changes that Simon has made and he has responded to my comments well. I would think he might be ready to change versions. What I see now, especially in terms of documentation, is much better and ready for publication.

@manuramon
Copy link

Hi all.
Thanks @smnnlt for considering some of my suggestions. I have retested the spiro package and everything works without errors. I have also tested the grid_args argument in the spiro_plot function. As I told you before, in my opinion it adds more flexibility in the plotting functionality. The example added in the spiro_plot help helps to understand how this new function works.

@melvidoni I have nothing more to add to this review.

All the best.

@melvidoni
Copy link
Contributor

@ropensci-review-bot approve spiro

@ropensci-review-bot
Copy link
Collaborator

Approved! Thanks @smnnlt for submitting and @jameshunterbr, @manuramon for your reviews! 😁

To-dos:

  • Transfer the repo to rOpenSci's "ropensci" GitHub organization under "Settings" in your repo. I have invited you to a team that should allow you to do so. You will need to enable two-factor authentication for your GitHub account.
    This invitation will expire after one week. If it happens write a comment @ropensci-review-bot invite me to ropensci/<package-name> which will re-send an invitation.
  • After transfer write a comment @ropensci-review-bot finalize transfer of <package-name> where <package-name> is the repo/package name. This will give you admin access back.
  • Fix all links to the GitHub repo to point to the repo under the ropensci organization.
  • Delete your current code of conduct file if you had one since rOpenSci's default one will apply, see https://devguide.ropensci.org/collaboration.html#coc-file
  • If you already had a pkgdown website and are ok relying only on rOpenSci central docs building and branding,
    • deactivate the automatic deployment you might have set up
    • remove styling tweaks from your pkgdown config but keep that config file
    • replace the whole current pkgdown website with a redirecting page
    • replace your package docs URL with https://docs.ropensci.org/package_name
    • In addition, in your DESCRIPTION file, include the docs link in the URL field alongside the link to the GitHub repository, e.g.: URL: https://docs.ropensci.org/foobar, https://github.com/ropensci/foobar
  • Fix any links in badges for CI and coverage to point to the new repository URL.
  • Increment the package version to reflect the changes you made during review. In NEWS.md, add a heading for the new version and one bullet for each user-facing change, and each developer-facing change that you think is relevant.
  • We're starting to roll out software metadata files to all rOpenSci packages via the Codemeta initiative, see https://docs.ropensci.org/codemetar/ for how to include it in your package, after installing the package - should be easy as running codemetar::write_codemeta() in the root of your package.
  • You can add this installation method to your package README install.packages("<package-name>", repos = "https://ropensci.r-universe.dev") thanks to R-universe.

Should you want to acknowledge your reviewers in your package DESCRIPTION, you can do so by making them "rev"-type contributors in the Authors@R field (with their consent).

Welcome aboard! We'd love to host a post about your package - either a short introduction to it with an example for a technical audience or a longer post with some narrative about its development or something you learned, and an example of its use for a broader readership. If you are interested, consult the blog guide, and tag @ropensci/blog-editors in your reply. They will get in touch about timing and can answer any questions.

We maintain an online book with our best practice and tips, this chapter starts the 3d section that's about guidance for after onboarding (with advice on releases, package marketing, GitHub grooming); the guide also feature CRAN gotchas. Please tell us what could be improved.

Last but not least, you can volunteer as a reviewer via filling a short form.

@smnnlt
Copy link
Author

smnnlt commented Aug 18, 2022

@ropensci-review-bot finalize transfer of spiro

@ropensci-review-bot
Copy link
Collaborator

Transfer completed.
The spiro team is now owner of the repository and the author has been invited to the team

@jameshunterbr
Copy link

jameshunterbr commented Oct 11, 2022 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

7 participants