r - data.table und testet das Paket

Ich erstelle ein Paket, das mit data.table funktioniert und das mit package testthat getestet werden sollte. Während der Code beim Aufrufen über die Befehlszeile einwandfrei funktioniert, treten beim Aufrufen über einen Testfall Probleme auf. Es scheint, dass die Funktion [] aus dem Basispaket, d. H. Die Funktion für data.frames, beim Ausführen der Tests verwendet wird.

Ich habe ein minimales Beispiel erstellt, das hier zu finden ist:https: //github.com/utalo/test_datatable_testtha

Das Paket enthält eine einzelne Funktion:

test <- function() {
   dt <- data.table(MESSAGE="Test 1234567890",TYPE="ERROR")
   dt[,.(MESSAGE=strwrap(MESSAGE,width = 10)),by=.(TYPE)]
}

Wenn Sie @ anruftest.datatable.testthat:::test() Von der Kommandozeile erhalte ich das erwartete Ergebnis:

    TYPE    MESSAGE
 1: ERROR       Test
 2: ERROR 1234567890

Wenn Sie jedoch den folgenden Komponententest ausführen:

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)
})

Ich erhalte eine Fehlermeldung:

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)

Wie Sie sehen, wird im Test das [] von data.frame aufgerufen. Meine erste Vermutung war, dass die Abhängigkeit zum data.table-Paket nicht korrekt deklariert ist. Dies ist meine DESCRIPTION-Datei:

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

GemäßUsing data.table package in meinem eigenen Paket Es sollte ausreichen, data.table als abhängiges Paket zu deklarieren. Dies scheint hier jedoch nicht der Fall zu sein.

Gibt es Hinweise, warum meine Funktion funktioniert, wenn sie direkt, aber nicht im Kontext von testthat aufgerufen wird?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage