[英]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.