Testthat и roxygen для аналитических проектов, не являющихся пакетами

Я пытаюсь выяснить, как я могу использовать некоторые функции devtools, такие как testthat, roxygen и т. д., когда я работаю с проектом R, который не является пакетом. В книге "R Packages (2e)" есть хорошие примеры того, как я могу использовать все эти возможности. Но когда я пытаюсь использовать это в проекте, который не является пакетом, я получаю сообщения об ошибках, например. следующее:

тест() Ошибка в package_file(): ! Не удалось найти корень пакета. ℹ Есть . внутри пакета? Запустите rlang::last_trace(), чтобы увидеть, где произошла ошибка.

Я работаю в проекте, который я не настроил как пакет. В документации пакета usethis эта опция упоминается явно, но мне не удалось найти примеров того, как это работает на практике. Вся документация, которую я смог найти, относится к разработке пакетов.

Возможно, вы переоцениваете то, что такое R-пакет. Технически пакет R — это всего лишь один каталог (R/) и файл DESCRIPTION с именем пакета и номером версии. Убедитесь, что они у вас есть, и у вас есть «пакет». Затем вы можете построить вокруг него свой проект, не называя его пакетом и не устанавливая.

Karolis Koncevičius 08.04.2023 21:27
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вероятно, было бы разумно, если бы вы просто настроили пакет — это упрощает жизнь, поскольку и 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. (как уже упоминалось с пакетом, вам не нужно получать содержимое кода)

Другие вопросы по теме