From 528014708f2b0f72ea5341f3f447c54002312856 Mon Sep 17 00:00:00 2001 From: orichters Date: Tue, 5 Sep 2023 14:56:27 +0200 Subject: [PATCH] always run checkVariableNames on convGDX2Mmif --- .buildlibrary | 2 +- CITATION.cff | 2 +- DESCRIPTION | 2 +- NAMESPACE | 1 + R/checkVariableNames.R | 25 ++++++++++++++++++++++++ R/convGDX2MIF.R | 2 ++ README.md | 6 +++--- man/checkVariableNames.Rd | 18 +++++++++++++++++ tests/testthat/test-checkVariableNames.R | 12 ++++++++++++ tests/testthat/test-convGDX2mif.R | 18 +---------------- 10 files changed, 65 insertions(+), 23 deletions(-) create mode 100644 R/checkVariableNames.R create mode 100644 man/checkVariableNames.Rd create mode 100644 tests/testthat/test-checkVariableNames.R diff --git a/.buildlibrary b/.buildlibrary index 2031abb1..c8741711 100644 --- a/.buildlibrary +++ b/.buildlibrary @@ -1,4 +1,4 @@ -ValidationKey: '218811405' +ValidationKey: '218987850' AcceptedWarnings: - 'Warning: package ''.*'' was built under R version' - 'Warning: namespace ''.*'' is not available and has been replaced' diff --git a/CITATION.cff b/CITATION.cff index 68886a8c..75fc1e97 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -2,7 +2,7 @@ cff-version: 1.2.0 message: If you use this software, please cite it using the metadata from this file. type: software title: 'remind2: The REMIND R package (2nd generation)' -version: 1.116.1 +version: 1.117.0 date-released: '2023-09-05' abstract: Contains the REMIND-specific routines for data and model output manipulation. authors: diff --git a/DESCRIPTION b/DESCRIPTION index f44ef961..df5adf11 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Type: Package Package: remind2 Title: The REMIND R package (2nd generation) -Version: 1.116.1 +Version: 1.117.0 Date: 2023-09-05 Authors@R: c( person("Renato", "Rodrigues", , "renato.rodrigues@pik-potsdam.de", role = c("aut", "cre")), diff --git a/NAMESPACE b/NAMESPACE index a206de63..e34bd959 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -7,6 +7,7 @@ export(calcPrice) export(calcTimeSeriesStats) export(calc_CES_marginals) export(calc_regionSubset_sums) +export(checkVariableNames) export(checkVsCalibData) export(colorScenConf) export(compareCalibrationTargets) diff --git a/R/checkVariableNames.R b/R/checkVariableNames.R new file mode 100644 index 00000000..737da1fa --- /dev/null +++ b/R/checkVariableNames.R @@ -0,0 +1,25 @@ +#' checkVariablesNames checks remind2 reporting on inconsistency in variable names +#' +#' Pass a vector of variable names including the units. Get warnings if inconsistencies are found +#' for the reporting +#' @param vars vector with variable names and units such as "PE (EJ)" +#' @author Oliver Richters +#' @export +checkVariableNames <- function(vars) { + + barspace <- grep("[\\| ]{2}|^[\\| ]|[\\| ]$", vars, value = TRUE) + if (length(barspace) > 0) { + warning("These variable names have wrong bars and spaces: ", paste(barspace, collapse = ", ")) + } + + NAvar <- grep("[\\|\\( ]NA[\\|\\) ]|^NA", vars, value = TRUE) + NAvar <- NAvar[! grepl("^Services and Products\\|Transport\\|non-LDV\\|S", NAvar)] # unit NA, but ok, see issue #408 + if (length(NAvar) > 0) { + warning("These variables and units contain NA: ", paste(NAvar, collapse = ", ")) + } + + noUnit <- grep(" \\(.*\\)$", vars, value = TRUE, invert = TRUE) + if (length(noUnit) > 0) { + warning("These variables have no units: ", paste(noUnit, collapse = ", ")) + } +} diff --git a/R/convGDX2MIF.R b/R/convGDX2MIF.R index f06d65d4..f1112721 100644 --- a/R/convGDX2MIF.R +++ b/R/convGDX2MIF.R @@ -115,6 +115,8 @@ convGDX2MIF <- function(gdx, gdx_ref = NULL, file = NULL, scenario = "default", output <- add_dimension(output,dim=3.1,add = "model",nm = "REMIND") output <- add_dimension(output,dim=3.1,add = "scenario",nm = scenario) + checkVariableNames(getNames(output, dim = 3)) + sumChecks <- piamInterfaces::checkSummations( mifFile = output, outputDirectory = NULL, summationsFile = "extractVariableGroups", diff --git a/README.md b/README.md index 39d63ab9..462780e9 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # The REMIND R package (2nd generation) -R package **remind2**, version **1.116.1** +R package **remind2**, version **1.117.0** [![CRAN status](https://www.r-pkg.org/badges/version/remind2)](https://cran.r-project.org/package=remind2) [![R build status](https://github.com/pik-piam/remind2/workflows/check/badge.svg)](https://github.com/pik-piam/remind2/actions) [![codecov](https://codecov.io/gh/pik-piam/remind2/branch/master/graph/badge.svg)](https://app.codecov.io/gh/pik-piam/remind2) [![r-universe](https://pik-piam.r-universe.dev/badges/remind2)](https://pik-piam.r-universe.dev/builds) @@ -49,7 +49,7 @@ In case of questions / problems please contact Renato Rodrigues . +Rodrigues R, Baumstark L, Benke F, Dietrich J, Dirnaichner A, Führlich P, Giannousakis A, Hasse R, Hilaire J, Klein D, Koch J, Kowalczyk K, Levesque A, Malik A, Merfort A, Merfort L, Morena-Leiva S, Pehl M, Pietzcker R, Rauner S, Richters O, Rottoli M, Schötz C, Schreyer F, Siala K, Sörgel B, Spahr M, Strefler J, Verpoort P (2023). _remind2: The REMIND R package (2nd generation)_. R package version 1.117.0, . A BibTeX entry for LaTeX users is @@ -58,7 +58,7 @@ A BibTeX entry for LaTeX users is title = {remind2: The REMIND R package (2nd generation)}, author = {Renato Rodrigues and Lavinia Baumstark and Falk Benke and Jan Philipp Dietrich and Alois Dirnaichner and Pascal Führlich and Anastasis Giannousakis and Robin Hasse and Jérome Hilaire and David Klein and Johannes Koch and Katarzyna Kowalczyk and Antoine Levesque and Aman Malik and Anne Merfort and Leon Merfort and Simón Morena-Leiva and Michaja Pehl and Robert Pietzcker and Sebastian Rauner and Oliver Richters and Marianna Rottoli and Christof Schötz and Felix Schreyer and Kais Siala and Björn Sörgel and Mike Spahr and Jessica Strefler and Philipp Verpoort}, year = {2023}, - note = {R package version 1.116.1}, + note = {R package version 1.117.0}, url = {https://github.com/pik-piam/remind2}, } ``` diff --git a/man/checkVariableNames.Rd b/man/checkVariableNames.Rd new file mode 100644 index 00000000..787ab9a2 --- /dev/null +++ b/man/checkVariableNames.Rd @@ -0,0 +1,18 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/checkVariableNames.R +\name{checkVariableNames} +\alias{checkVariableNames} +\title{checkVariablesNames checks remind2 reporting on inconsistency in variable names} +\usage{ +checkVariableNames(vars) +} +\arguments{ +\item{vars}{vector with variable names and units such as "PE (EJ)"} +} +\description{ +Pass a vector of variable names including the units. Get warnings if inconsistencies are found +for the reporting +} +\author{ +Oliver Richters +} diff --git a/tests/testthat/test-checkVariableNames.R b/tests/testthat/test-checkVariableNames.R new file mode 100644 index 00000000..f6e7ca56 --- /dev/null +++ b/tests/testthat/test-checkVariableNames.R @@ -0,0 +1,12 @@ +test_that("checkVariableNames works", { + fine <- c("PE (EJ)", "PE (NA/yr)", "FE|What (yr)", "FE|Electricity (EJ/yr)") + for (v in fine) { + expect_no_warning(checkVariableNames(v)) + } + wrong <- c("PE", "PE| (EJ)", "PE||Elec (EJ)", "PE||Elec", "PE (EJ)", "PE (NA)", + "NA|PE (EJ)", "PE|NA|What (EJ)", " PE (EJ)", "PE (EJ) ") + for (v in wrong) { + w <- capture_warnings(checkVariableNames(v)) + expect_true(length(w) > 0) + } +}) diff --git a/tests/testthat/test-convGDX2mif.R b/tests/testthat/test-convGDX2mif.R index fdff0d30..2766d1ae 100644 --- a/tests/testthat/test-convGDX2mif.R +++ b/tests/testthat/test-convGDX2mif.R @@ -10,22 +10,6 @@ library(dplyr) library(gdx) -checkVariableNames <- function(out) { - - barspace <- grep("[\\| ]{2}", getNames(out, dim = 3), value = TRUE) - - if (length(barspace) > 0) { - warning("These variable names have wrong bars and spaces: ", paste(barspace, collapse = ", ")) - } - - NAvar <- grep("[\\|\\( ]NA[\\|\\) ]|^NA", getNames(out, dim = 3), value = TRUE) - NAvar <- NAvar[! grepl("^Services and Products\\|Transport\\|non-LDV\\|S", NAvar)] # unit NA, but ok, see issue #408 - if (length(NAvar) > 0) { - warning("These variables and units contain NA: ", paste(NAvar, collapse = ", ")) - } -} - - test_that("Test if REMIND reporting is produced as it should and check data integrity", { skip_if_not(as.logical(gdxrrw::igdx(silent = TRUE)), "gdxrrw is not initialized properly") @@ -80,7 +64,7 @@ test_that("Test if REMIND reporting is produced as it should and check data inte message("Running convGDX2MIF(", gdxPath, ")...") mifContent <- convGDX2MIF(gdxPath, gdx_refpolicycost = gdxPath) - checkVariableNames(mifContent) + expect_no_warning(checkVariableNames(getNames(mifContent, dim = 3))) magclass::write.report( x = magclass::collapseNames(mifContent),