r - data.table и testthat пакет
Я создаю пакет, который работает с data.table и который должен быть протестирован с помощью пакета testthat. Хотя код работает нормально при вызове из командной строки, у меня возникают проблемы при вызове из тестового примера. Кажется, что функция [] из базового пакета, то есть функция для data.frames, используется при запуске тестов.
Я создал минимальный пример, который можно найти здесь:https://github.com/utalo/test_datatable_testthat
Пакет содержит одну функцию:
test <- function() {
dt <- data.table(MESSAGE="Test 1234567890",TYPE="ERROR")
dt[,.(MESSAGE=strwrap(MESSAGE,width = 10)),by=.(TYPE)]
}
При звонкеtest.datatable.testthat:::test()
из командной строки я получаю ожидаемый результат:
TYPE MESSAGE
1: ERROR Test
2: ERROR 1234567890
Однако при выполнении следующего модульного теста:
test_that("Test package",{
dt <- test()
expected_res <- structure(list(TYPE = c("ERROR", "ERROR"),
MESSAGE = c("Test","1234567890")),
row.names = c(NA, -2L), class = c("data.table","data.frame"),
.Names = c("TYPE", "MESSAGE"))
expect_equal(dt,expected_res)
})
Я получаю ошибку:
1
1. Error: Test package -------------------------------------------------------------------------------------------------------
could not find function "."
1: withCallingHandlers(eval(code, new_test_environment), error = capture_calls, message = function(c) invokeRestart("muffleMessage"))
2: eval(code, new_test_environment)
3: eval(expr, envir, enclos)
4: test() at test.R:4
5: dt[, .(MESSAGE = strwrap(MESSAGE, width = 10)), by = .(TYPE)] at test.datatable.testthat/R/hello.R:5
6: `[.data.table`(dt, , .(MESSAGE = strwrap(MESSAGE, width = 10)), by = .(TYPE)) at C:\Users\D057806\Documents\R\test.datatable.testthat/R/hello.R:5
7: `[.data.frame`(x, i, j)
Как видите, в тесте вызывается [] data.frame. Моим первым предположением было то, что зависимость от пакета data.table объявлена неправильно. Это мой файл ОПИСАНИЕ:
Package: test.datatable.testthat
Type: Package
Title: What the Package Does (Title Case)
Version: 0.1
Date: 2016-04-07
Authors@R: person("First", "Last", email = "[email protected]", role = c("aut", "cre"))
Description: More about what it does (maybe more than one line)
License: What license is it under?
LazyData: TRUE
Depends:
data.table
Suggests:
testthat
RoxygenNote: 5.0.1
В соответствии сИспользование пакета data.table внутри моего собственного пакета должно быть достаточно объявить data.table как зависимый пакет. Однако, похоже, что это не так.
Любые подсказки относительно того, почему моя функция работает, когда вызывается напрямую, но не в контексте testthat?