这可能是一个非常愚蠢的问题,但我如何检查自己编写的函数是否有效?
我正在编写一个涉及许多其他函数和循环的非常简单的函数,并且想知道是否有任何方法可以检查错误/错误,或者只是检查函数是否可行。我只是创建一个简单的假数据框并对其进行测试吗?
正如评论中其他用户所建议的那样,我添加了我编写的函数部分。所以基本上我有一个包含好坏数据的数据框,坏数据用标记标记。我想编写一个函数,当用户将flag.option设置为1时,允许我像往常一样生成绘图(使用标记点),并在用户将flag.option设置为0时从绘图中删除标记点。
AIR.plot <- function(mydata, flag.option) {
if (flag.option == 1) {
par(mfrow(2,1))
conc <- tapply(mydata$CO2, format(mydata$date, "%Y-%m-%d %T"), mean)
dates <- seq(mydata$date[1], mydata$date[nrow(mydata(mydata))], length = nrow(conc))
plot(dates, conc,
type = "p",
col = "blue",
xlab = "day",
ylab = "CO2"), error = function(e) plot.new(type = "n")
barplot(mydata$lines, horiz = TRUE, col = c("red", "blue")) # this is just a small bar plot on the bottom that specifies which sample-taking line (red or blue) is providing the samples
} else if (flag.option == 0) {
# I haven't figured out how to write this part yet but essentially I want to remove all
# of the rows with flags on
}
}
在此先感谢,我还不是一位经验丰富的R用户,所以请帮助我。
答案 0 :(得分:3)
在我们(意思是在我的工作场所)向我们的生产环境发布任何代码之前,我们会运行一系列测试程序,以确保我们的代码按照我们希望的方式运行。它通常涉及几个对代码有不同看法的人。
理想情况下,此类验证应在您编写任何代码之前开始。您应该能够回答的一些问题是:
如果准备一份要求列表和在开始编写任何代码之前编写文档,那么成功的可能性就会很快上升。当然,在开始编写代码时,您可能会发现需要调整需求,或者需要修改函数参数。没关系,但在发生这些变化时记录。
在编写函数时,使用assertthat
或checkmate
这样的包在代码中编写所需数量的参数检查。我工作的一些最好,最可靠的代码包括大约100行参数检查和3-4行代码实际上要做的事情。这似乎有点矫枉过正,但是你可以防止因用户提供的错误输入而导致的许多问题。
当您完成函数编写之后,您应该在此处列出需求和明确记录您的参数期望。这是您使用testthat
包的地方。
编写所有这些测试可能需要很长时间,但一旦完成,任何进一步的开发都更容易检查,因为任何违反现有要求的内容都将无法通过测试。
话虽这么说,我在自己的工作中非常难以遵循这个过程。我倾向于编写代码,然后记录我所做的事情。但是我编写的最好的代码是我在概念上计划出来的,写了我的文档,编码,然后根据我的文档进行测试。
答案 1 :(得分:1)
务实地查看它,看看包assertthat
和testthat
。 assertthat
将帮助您插入“介于两者之间”的结果,testthat
用于编写正确的测试。是的,编写测试的常用方法是创建一个包含测试数据的小测试示例。