如何为R包创建具有动态输入的函数



我正在创建一个R包。我有一个函数,它需要用户的一些动态输入,以便产生所需的输出。我目前使用readline()作为动态输入法。问题是我不知道如何使它同时适用于roxygen2examples,也不知道如何用testthat(或任何其他方法)正确地测试它。

如果有更好的方法来获得用户输入,那也很好。

这是一个与我的函数有相同问题的最小函数。

#' Dynamic Input Example
#'
#' @param input A number
#'
#' @return Console input times 2 minus 1
#' @export
#'
#' @examples
#' exampler(4)
exampler <- function(input){
dynamic_input <- as.numeric(readline(prompt=paste("Give a value between", input*3-1, "and", input*7+2)))
return(dynamic_input*2-1)
}

使用此语法可防止在检查期间运行函数示例:

#' @examples dontrun{interactive_function()}

对于测试套件,我们可以使用以下(需要mockery包):

test_that("interactive_function works with defaults", {
mockery::stub(interactive_function, "readline", "dummy return value for mock function")

testvalue <- interactive_function()
[testcode ...]

})

使用该代码,如果interactive_function调用了mock函数,则它将在测试期间替换readline函数,并返回"0";模拟函数的伪返回值";。mockery还提供函数来跟踪函数调用,甚至跟踪调用函数时使用的参数。所有非常方便的东西;)

最新更新