2013-10-09 3 views
2

Я создаю R-пакет и нашел полезным разбить части логики в одном файле на внутренние вспомогательные функции, которые я определяю в том же файле. У меня есть особый случай, когда моя функция решает, какую вспомогательную функцию использовать через match.fun(). Поскольку они не будут полезны другим функциям или людям, я не хочу помещать их в отдельные файлы, и я не хочу их экспортировать.С Roxygen и testthat, каков надлежащий способ сделать внутренние вспомогательные функции доступными для тестовых площадок, называемых во время проверки R CMD?

Все мои экзамены проходят с использованием test_dir(). Когда я не экспортирую эти функции, мои тесты не срабатывают при проверке R CMD.

"object 'helperfunction1' of mode 'function' was not found", quote(get(as.character(FUN), 
     mode = "function", envir = envir))) 

Посмотрев на this post, я могу получить вещи на работу, если я явно экспортировать или добавлять записи экспорта в пространстве имен, но опять же я не хочу, чтобы экспортировать их.

Есть ли лучший способ сделать это и не требует от меня экспорта? (Я буду признавать, что источником проблемы может быть match.fun(), и я открыт для других способов вызова функций во время выполнения.)

+0

Не можете ли вы просто использовать 'yourPackage ::: helperfunction1 (...' there? (Обратите внимание, что это 3 не 2 двоеточия.) –

ответ

0

Из памяти в документации в последний раз я не читал (это может быть изменено), но он будет работать правильно (без экспорта), пока все в нужные директории:

Вы должны иметь файл:

tests/run-all.R 

это выглядит как:

library(testthat) 
library(myPackage) 

test_package("myPackage") 

Тогда ваши индивидуальные тестовые файлы должны находиться в каталоге inst/tests

Они будут работать, когда вы делаете R CMD check, в противном случае вы можете вызвать test_package("myPackage") в R вручную.

+0

Да, у меня есть этот тестовый бегун, но в этом случае я не планируя сделать мои тесты доступными в пакете, поэтому они не находятся в inst/tests. Есть ли другой способ? На данный момент мой тестовый бегун ('tests/run-all.R') выглядит так: ' library (testthat) test_dir («testthat») ' –

+0

Я не уверен. Я просто знаю, что если файлы находятся в' inst/tests', вам не нужно экспортировать те функции, на которые полагаются те тесты. –