[英]How to write a testthat unit test for a function that returns a data frame
我正在编写一个最终返回数据框的脚本。 我的问题是,如果有任何关于如何使用单元测试包以确保返回的数据框是正确的良好实践。 (我是R程序员的开始,加上单元测试的新概念)
我的脚本实际上如下所示:
# initialize data frame
df.out <- data.frame(...)
# function set
function1 <- function(x) {...}
function2 <- function(x) {...}
# do something to this data frame
df.out$new.column <- function1(df.out)
# do something else
df.out$other.new.column <- function2(df.out)
# etc ....
......最终我得到了一个包含许多新列的数据框。 但是,使用单元测试测试生成的数据帧是预期的最佳方法是什么?
到目前为止,我已经创建了单元测试来检查每个函数的结果,但我想确保将所有这些一起运行产生预期的结果。 我查看了Hadley Wickham关于测试的页面,但是在返回数据帧时看不出有什么明显的事情要做。
我的想法是:
expect_that
或类似方法检查输出是否等于此数据帧 关于在哪里寻找指导的任何想法/指示? 到目前为止,我的谷歌已经让我失望了。
你的直觉似乎是对的。 根据函数的预期输出手动构造一个data.frame,然后将其与函数的输出进行比较。
# manually created data
dat <- iris[1:5, c("Species", "Sepal.Length")]
# function
myfun <- function(row, col, data) {
data[row, col]
}
# result of applying function
outdat <- myfun(1:5, c("Species", "Sepal.Length"), iris)
# two versions of the same test
expect_true(identical(dat, outdat))
expect_identical(dat, outdat)
如果您的data.frame可能不相同 ,您还可以在部分data.frame中运行测试,包括:
dim(outdat)
,检查大小是否正确 attributes(outdat)
或列的属性 sapply(outdat, class)
,检查变量类 如果您想在运行时测试它,您应该查看优秀的ensurer
包,请参阅此处 。 在页面底部,您可以看到如何构建可以测试数据框的模板,您可以根据需要进行详细和具体的模板制作。
我只是用这样的东西
d1 <- iris
d2 <- iris
expect_that(d1, equals(d2)) # passes
d3 <- iris
d3[141,3] <- 5
expect_that(d1, equals(d3)) # fails
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.