Я пытаюсь выяснить, как я могу использовать некоторые функции devtools, такие как testthat, roxygen и т. д., когда я работаю с проектом R, который не является пакетом. В книге "R Packages (2e)" есть хорошие примеры того, как я могу использовать все эти возможности. Но когда я пытаюсь использовать это в проекте, который не является пакетом, я получаю сообщения об ошибках, например. следующее:
тест() Ошибка в
package_file()
: ! Не удалось найти корень пакета. ℹ Есть . внутри пакета? Запуститеrlang::last_trace()
, чтобы увидеть, где произошла ошибка.
Я работаю в проекте, который я не настроил как пакет. В документации пакета usethis эта опция упоминается явно, но мне не удалось найти примеров того, как это работает на практике. Вся документация, которую я смог найти, относится к разработке пакетов.
Вероятно, было бы разумно, если бы вы просто настроили пакет — это упрощает жизнь, поскольку и roxygen2
, и testthat
в основном предназначены для работы с пакетами. Если вы используете RStudio, вы также можете просто нажать кнопки Built и Check-, чтобы создать документацию roxygen или проверить свой пакет.
Как упомянул Каролис в комментариях, пакет R — это не что иное, как наличие файла DESCRIPTION и папки R, где хранятся ваши файлы R. (и папка с тестами, если вы хотите иметь тесты)
Но если вы не хотите устанавливать пакет, вы, конечно же, можете использовать testthat в обычном проекте.
Просто напишите testthat test и сохраните его в файле .R.
Например. возьмите этот тест (конечно, замените его чем-то более полезным) и поместите его в файл R my_test.R
, предположим, что он находится в папке с именем tests
.
testthat::expect_identical(1,1)
После этого вы можете вызвать test_file()
testthat::test_file(path = "tests/my_test.R")
И вы получите такой вывод:
[ НЕУДАЧА 0 | ПРЕДУПРЕЖДЕНИЕ 0 | ПРОПУСТИТЬ 0 | ПРОХОД 1 ]
Если у вас есть несколько файлов с тестами, вы можете просто вызвать test_dir()
, чтобы проверить всю папку
Итак, чтобы проверить все файлы в папке tests
, вы должны написать:
testthat::test_dir(path = "tests")
Имейте в виду, что в ваших тестовых файлах вам сначала нужно будет source
свой код, иначе testthat не загрузит определенные вами функции. При использовании пакета этого делать не нужно.
source("/R/my_code.R")
test_that("Add",
{
expect_equal(my_add_function(1,1), 2)
})
Таким образом, вам нужно получить my_code.R
, чтобы загрузить вашу my_add_function
функцию, чтобы протестировать ее с помощью testthat.
(как уже упоминалось с пакетом, вам не нужно получать содержимое кода)
Возможно, вы переоцениваете то, что такое R-пакет. Технически пакет R — это всего лишь один каталог (
R/
) и файл DESCRIPTION с именем пакета и номером версии. Убедитесь, что они у вас есть, и у вас есть «пакет». Затем вы можете построить вокруг него свой проект, не называя его пакетом и не устанавливая.