我正在尝试编写自己的测试函数(test_if),它返回测试结果以及可选的错误消息。该函数基于 assertthat-package 中的 validate_that 函数。
test_if 函数似乎可以工作,但是,我还想在更具体的函数 (check_input) 中使用 test_if,以分析闪亮的用户输入。我有一个问题,如果我在 check_input 函数中定义 test_if 函数,check_input 函数才有效。
我想这个问题是由一些搜索范围或环境问题引起的。但是,我真的是 R 环境的新手。如何让我的 check_input-function 工作而不需要在其中定义 test_if 函数?
非常感谢,西尔克
这是我的最小工作示例:
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)