[英]guidelines for testing a statistical function in R?
问题:我正在测试正在开发的程序包中的功能,并想知道您是否可以就如何执行此操作提出一些一般性准则。 这些功能包括各种统计建模,转换,子集和绘图。 是否有“标准”或足够的测试?
范例:测试提示我问这个问题,
函数dtheta:
dtheta <- function(x) {
## find the quantile of the mean
q.mean <- mean(mean(x) >= x)
## find the quantiles of ucl and lcl (q.mean +/- 0.15)
q.ucl <- q.mean + 0.15
q.lcl <- q.mean - 0.15
qs <- c(q.lcl, q.mean, q.ucl)
## find the lcl, mean, and ucl of the vector
c(quantile(x,qs), var(x), sqrt(var(x))/mean(x))
}
步骤1:制作测试数据:
set.seed(100) # per Dirk's recommendation
test <- rnorm(100000,10,1)
步骤2:将功能的预期输出与功能的实际输出进行比较:
expected <- quantile(test, c(0.35, 0.65, 0.5))
actual <- dtheta(test)[1:3]
signif(expected,2) %in% signif(actual,2)
步骤3:也许再做一次测试
test2 <- runif(100000, 0, 100)
expected <- c(35, 50, 65)
actual <- dtheta(test2)
expected %in% signif(actual,2)
步骤4:如果为真,则考虑功能为“功能性”
这取决于您要测试的内容。 除了Dirks的建议之外, svUnit
提到了svUnit
或RUnit
包VitoshKa,我想添加一些内容:
replicate()
是在此上下文中使用的很好的函数。 关于数据集扩展测试的示例:在这些情况下,您希望看到什么? 这是您期望的结果吗? 并非根据您所做的测试。
> test3 <- rep(12,100000) # data with only 1 value
> expected <- c(12, 12, 12)
> actual <- dtheta(test3)
Error in quantile.default(x, qs) : 'probs' outside [0,1]
> test4 <- rbinom(100000,30,0.5) # large dataset with a limited amount of values
> expected <- quantile(test4,c(0.35, 0.50, 0.65))
> actual <- dtheta(test4)
> expected %in% signif(actual,2)
[1] FALSE TRUE TRUE
> test5 <- runif(100,0,100) # small dataset.
> expected <- c(35, 50, 65)
> actual <- dtheta(test5)
> expected %in% signif(actual,2)
[1] FALSE FALSE FALSE
编辑:更正的代码,因此测试更有意义。
你需要写
输入合理值的测试可显示正确答案
当您输入废话时,表明您的功能的测试会正确失败。
测试所有边界情况
关于测试软件的不同策略的文献很多。 Wikipedia的软件测试页和任何开始的地方一样好。
看你的例子:
输入字符串/数据框/列表时会发生什么?
负x
或虚x
呢?
向量/数组x
怎么样?
如果只允许正x
,那么x = 0
时会发生什么?
请注意,子功能(仅由您的函数调用,而不会由用户调用)需要较少的输入检查,因为您可以更好地控制该函数的内容。
好问题。
除了设置种子等一般性功能外,我建议您查看R源中的一些测试。 源代码中的tests/
目录中有很多。 R Base中的某些软件包(例如工具)还具有子目录tests/
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.