1

I am trying to write my own test-function (test_if) that returns both the result of the test as well as an optional error message. The function is based on the validate_that function in the assertthat-package.

The test_if function seems to work, however, I further want to use test_if in a more specific function (check_input) that analyses user-inputs in shiny. There I have a problem, that the check_input-function only works, if I define the test_if function inside the check_input function.

I suppose that the problem is caused by some search scope or environment problem. However, I am really a newbie to environments in R. How can I get my check_input-function work without the need to define the test_if function inside it?

Many thanks, Silke

Here is my minimal working example:

library(assertthat)

   test_if <- function(...,msg=NULL) {
   test <- validate_that(...,msg=msg)
     if (is.logical(test)) {

     return(list(assertation=test,msg=NULL))

   }

   if (is.character(test)) {

      return(list(assertation=FALSE,msg=test))
  }


}

test_if(2==3)
test_if(3==3)

test_if(2==3,3==4,msg="something is wrong")


### To check different inputs

check_input1 <- function(value1 = NULL,value2 = NULL) {


  test_if <- function(...,msg=NULL) {

    test <- validate_that(...,msg=msg)

    if (is.logical(test)) {

      return(list(assertation=test,msg=NULL))

    }

    if (is.character(test)) {

      return(list(assertation=FALSE,msg=test))
    }


  }

  error_msg <- ""
  error_status <- FALSE

  check <- test_if(is.numeric(value1))

  error_msg <- check$msg
  error_status <- check$assertation

  return(list(error_msg=error_msg,error_status=error_status))

}


   check_input2 <- function(value1 = NULL,value2 = NULL) {

   error_msg <- ""
   error_status <- FALSE

  check <- test_if(is.numeric(value1))

  error_msg <- check$msg
  error_status <- check$assertation

  return(list(error_msg=error_msg,error_status=error_status))

   }

   check_input1(value1=1)
   check_input2(value1=1)
R learner
  • 101
  • 7

0 Answers0