From c2e79f4b0df0500ad3680940aa97ac8d732dc5aa Mon Sep 17 00:00:00 2001 From: jwildfire Date: Mon, 22 Apr 2019 07:29:26 -0700 Subject: [PATCH] allow null in hasField/Column checks. fix #240 --- R/hasColumn.R | 11 ++++++++--- R/hasField.R | 22 +++++++++++++--------- tests/testthat/test_hasColumn.R | 5 ++++- tests/testthat/test_hasField.R | 3 +++ 4 files changed, 28 insertions(+), 13 deletions(-) diff --git a/R/hasColumn.R b/R/hasColumn.R index d64fc52d..b1149dc1 100644 --- a/R/hasColumn.R +++ b/R/hasColumn.R @@ -14,10 +14,15 @@ hasColumn <- function(columnName, data){ stopifnot( - typeof(columnName)=="character", - length(columnName)==1, + typeof(columnName)=="character" || is.null(columnName), + length(columnName)==1 || is.null(columnName), is.data.frame(data) ) - return(toupper(columnName) %in% toupper(colnames(data))) + if(is.null(columnName)){ + return(FALSE) + } else { + return(toupper(columnName) %in% toupper(colnames(data))) + } + } diff --git a/R/hasField.R b/R/hasField.R index ab038568..f4612c6a 100644 --- a/R/hasField.R +++ b/R/hasField.R @@ -16,18 +16,22 @@ hasField<- function(fieldValue, columnName, data){ stopifnot( length(fieldValue)==1, - typeof(columnName)=="character", - length(columnName)==1, + typeof(columnName)=="character" || is.null(columnName), + length(columnName)==1 || is.null(columnName), is.data.frame(data) ) - columnFound <- hasColumn(columnName=columnName, data=data) - if(columnFound){ + if(is.null(columnName)){ + return(FALSE) + } else { + columnFound <- hasColumn(columnName=columnName, data=data) + if(columnFound){ + validFields <- unique(data[[columnName]]) + } else{ + validFields <- c() + } + validFields <- unique(data[[columnName]]) - } else{ - validFields <- c() + return(fieldValue %in% validFields) } - - validFields <- unique(data[[columnName]]) - return(fieldValue %in% validFields) } diff --git a/tests/testthat/test_hasColumn.R b/tests/testthat/test_hasColumn.R index 5145492b..4751ebc8 100644 --- a/tests/testthat/test_hasColumn.R +++ b/tests/testthat/test_hasColumn.R @@ -13,7 +13,10 @@ test_that("columns are found when expected",{ # returns false when fieldValue isn't there or there is a type mismatch expect_false(hasColumn(columnName="PARAMETER",data=adlbc)) expect_false(hasColumn(columnName="SUBJID2",data=adlbc)) - + + # returns false for null columnName + expect_false(hasColumn(columnName=NULL,data=adlbc)) + # fails with invalid parameters expect_error(hasColumn(columnName=123,data=adlbc)) expect_error(hasColumn(columnName=c("PARAM","SUBJID"),data=adlbc)) diff --git a/tests/testthat/test_hasField.R b/tests/testthat/test_hasField.R index a1e9197e..7c18ed53 100644 --- a/tests/testthat/test_hasField.R +++ b/tests/testthat/test_hasField.R @@ -20,6 +20,9 @@ test_that("fields are found when expected",{ expect_false(hasField(fieldValue="Not_a_real_value",columnName="PARAM",data=adlbc)) expect_false(hasField(fieldValue=12,columnName="PARAM",data=adlbc)) + # returns false for null columnName + expect_false(hasField(fieldValue="Bilirubin (umol/L)",columnName=NULL,data=adlbc)) + # fails with invalid parameters expect_error(hasField(fieldValue="Bilirubin (umol/L)",columnName=c("PARAM","ID"),data=adlbc)) expect_error(hasField(columnName="PARAM",data=list(adlbc))) #fieldValue missing