From 9a7e25ad7e8c0ad12a0a1a841343b459a8cc2686 Mon Sep 17 00:00:00 2001 From: Simon Nolte Date: Thu, 31 Jul 2025 11:39:36 +0200 Subject: [PATCH] Fix bug in cosmed import --- NEWS.md | 2 +- R/spiro_get.R | 16 +++++++++++----- tests/testthat/testdata/cosmed.xlsx | Bin 16446 -> 16486 bytes 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/NEWS.md b/NEWS.md index 6872fb1..263ee28 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,7 +1,7 @@ spiro (development version) =========================== - +* Fix bug in Cosmed import leading to failure in rare cases spiro 0.2.3 (2025-02-18) =========================== diff --git a/R/spiro_get.R b/R/spiro_get.R index 90f6371..90a9604 100644 --- a/R/spiro_get.R +++ b/R/spiro_get.R @@ -245,7 +245,8 @@ spiro_get_cosmed <- function(file) { bodymass = as.numeric( get_meta( tbl, - c("Weight (Kg):", "Weight (Kg)", "Gewicht (Kg):", "Gewicht (Kg)") + c("Weight (Kg):", "Weight (Kg)", "Gewicht (Kg):", "Gewicht (Kg)", + "Weight (kg):", "Weight (kg)", "Gewicht (kg):", "Gewicht (kg)") ) ) ) @@ -308,10 +309,15 @@ spiro_get_cosmed <- function(file) { # rare special case if body mass has been deleted from meta data. Recalculates # body mass based on relative oxygen uptake present in raw data if (is.na(info$bodymass)) { - info$bodymass <- round( - # used first data value to recalculate body mass - as.numeric(data$VO2[[1]]) / as.numeric(data$`VO2/Kg`[[1]]), 1 - ) + if (any(colnames(data) == "VO2/Kg")) { + info$bodymass <- round( + as.numeric(data$VO2[[1]]) / as.numeric(data$`VO2/Kg`[[1]]), 1 + ) + } else if (any(colnames(data) == "VO2/kg")) { + info$bodymass <- round( + as.numeric(data$VO2[[1]]) / as.numeric(data$`VO2/kg`[[1]]), 1 + ) + } } attr(df, "info") <- info # write meta data diff --git a/tests/testthat/testdata/cosmed.xlsx b/tests/testthat/testdata/cosmed.xlsx index ef71a4bf56685a6c3fe114ec7f5c3775f569cc45..cb399d9c93adb36bacb43b899f1dace881bde7e6 100644 GIT binary patch delta 5107 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 delta 5050 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