Почему этот простой тест с data.table не удался? Как это исправить?
Предположим, я пишу посылкуhello
"...
R>library(devtools)
R>install_github("jimhester/covr")
R>create("hello")
... с одной экспортированной функцией:
hello <- function() {
dt<-as.data.table(list(a=1:10))
dt[,b:=a+2]
return(sum(dt[,b]))
}
Чтобы этот пакет работал, я также добавляю
Depends:
data.table
к DESCRIPTION
файл.
Теперь я хочу написать для него модульный тест:
R>use_testthat("testcovr")
... в файле tests/testthat/test-hello.R
:
context("hello")
test_that("hello works", {
expect_equal(hello(), 75)
})
Когда я запускаю тест, они терпят неудачу:
R> test()
Loading hello
Loading required package: testthat
Testing hello
hello: 1
Failed -----------------------------------------------------------------------------------------------------------------------
1. Error: hello works (@test-hello.R#7) --------------------------------------------------------------------------------------
Check that is.data.table(DT) == TRUE. Otherwise, := and `:=`(...) are defined for use in j, once only and in particular ways. See help(":=").
1: expect_equal(hello(), 75) at /home/Adama-docs/Adam/linux/tmp/hello/tests/testthat/test-hello.R:7
2: compare(object, expected, ...)
3: hello()
4: dt[, `:=`(b, a + 2)] at /home/Adama-docs/Adam/linux/tmp/hello/R/hello.R:18
5: `[.data.table`(dt, , `:=`(b, a + 2)) at /home/Adama-docs/Adam/linux/tmp/hello/R/hello.R:18
6: `[.data.frame`(x, i, j)
7: `:=`(b, a + 2)
8: stop("Check that is.data.table(DT) == TRUE. Otherwise, := and `:=`(...) are defined for use in j, once only and in particular ways. See help(\":=\").")
DONE =========================================================================================================================
Зачем?? Хотя я погуглил другие случаи несовместимости между testthat
а также data.table
они не касались :=
оператор. И они обвиняли testthat
пакет.
Вот моя сессия информация:
Session info ------------------------------------------------------------------------------------------------------------------
setting value
version R version 3.3.0 (2016-05-03)
system x86_64, linux-gnu
ui RStudio (0.99.902)
language en_US
collate en_US.UTF-8
tz <NA>
date 2016-06-16
Packages ----------------------------------------------------------------------------------------------------------------------
package * version date source
chron 2.3-47 2015-06-24 CRAN (R 3.3.0)
crayon 1.3.1 2015-07-13 CRAN (R 3.3.0)
data.table * 1.9.6 2015-09-19 CRAN (R 3.3.0)
devtools * 1.11.1 2016-04-21 CRAN (R 3.3.0)
digest 0.6.9 2016-01-08 CRAN (R 3.2.4)
magrittr 1.5 2014-11-22 CRAN (R 3.2.0)
memoise 1.0.0 2016-01-29 CRAN (R 3.3.0)
R6 2.1.2 2016-01-26 CRAN (R 3.3.0)
Rcpp 0.12.5 2016-05-14 CRAN (R 3.3.0)
roxygen2 5.0.1 2015-11-11 CRAN (R 3.3.0)
stringi 1.1.1 2016-05-27 CRAN (R 3.3.0)
stringr 1.0.0 2015-04-30 CRAN (R 3.2.0)
testdt * 0.1.0 <NA> local
testthat * 1.0.2 2016-04-23 CRAN (R 3.3.0)
withr 1.0.1.9000 2016-06-15 Github (jimhester/withr@bd42181)
Есть ли обходной путь для этого? Отказаться от data.table
это не вариант для меня, потому что моя библиотека имеет дело с действительно большими наборами данных.