Урок 5 DESCRIPTION - Метаданные пакета
В этом видео мы с вами подробно разберёмся с содержимым одного из главных файлов в вашем пакете - DESCRIPTION, в котором хранятся его метаданные.
Данный урок основан на главе "DESCRIPTION" книги "R Packages (2e)", под авторством Хедли Викхема и Дженни Брайан.
5.1 Видео
5.1.1 Тайм коды
00:00 Вступление
00:39 Назначение и минимальный пример файла DESCRIPTION
01:53 Настройка дефолтных значений полей файла DESCRIPTION с помощью опции usethis.description
03:04 Поля Title и Description
04:09 Поле Authors@R для указания авторства пакета
06:03 Поля URL и BugReports
06:34 Поле License
09:24 Поля Imports и Suggests
12:30 Прочие поля файла DESCRIPTION
14:20 Использование пользовательских полей в файле DESCRIPTION
15:17 Заключение
5.3 Конспект
Задача файла DESCRIPTION— хранить важные метаданные о вашем пакете. При создании пакета функцией usethis::create_package()
в созданном проекте будет сразу добавлен минимальный пример файл DESCRIPTION.
Package: package_name
Title: What the Package Does (One Line, Title Case)
Version: 0.0.0.9000
Authors@R:
person("Alexey", "Seleznev", , "selesnow@gmail.com", role = c("aut", "cre"),
comment = c(ORCID = "0000-0003-0410-7385"))
Description: What the package does (one paragraph).
License: `use_mit_license()`, `use_gpl3_license()` or friends to pick a
license
Encoding: UTF-8
Roxygen: list(markdown = TRUE)
RoxygenNote: 7.2.3
Во втором уроке курса я уже рассказывал о том, что вы можете задать дефолтные значения любых полей файла DESCRIPTION
, для этого добавьте код определения опции usethis.description
в файл .Rprofile
.
options(
usethis.description = list(
"Authors@R" = utils::person(
"Jane", "Doe",
email = "jane@example.com",
role = c("aut", "cre"),
comment = c(ORCID = "JANE'S-ORCID-ID")
)
)
)
Далее подробно разберёмся все обязательные поля файла DESCRIPTION
5.3.1 Title и Description
- Title представляет собой однострочное описание пакета и часто отображается в листинге пакета. Это должен быть обычный текст (без разметки), каждое слово должно начинаться с заглавной буквы, и НЕ заканчивающийся точкой. Будьте краткими: списки часто урезают заголовок до 65 символов.
- Description более подробное описание, чем заголовок. Вы можете использовать несколько предложений, но вы ограничены одним абзацем. Если ваше описание занимает несколько строк (а так и должно быть!), ширина каждой строки не должна превышать 80 символов. Отступ последующих строк с 4 пробелами.
5.3.3 URL и BugReports
- Поле
URL
обычно используется для рекламы веб-сайта пакета и для ссылки на общедоступный репозиторий исходных кодов, где происходит разработка. -
BugReports
это URL-адрес, по которому следует отправлять отчеты об ошибках, например, как раздел issues GitHub.
5.3.4 License
данное поле отвечает за тип лицензии вашего пакета, лицензия может регулировать законные права сторонних разработчиков на использование вашего кода, и в частности всего пакета в их собственных разработках или публикациях. Важно понимать, что это, по сути, машиночитаемое License
поле, и не стоит заполнять его руками, для каждого типа лицензии в пакете usethis
есть отдельная функция, которая заполняет поле License
и добавляет в ваш пакет отдельный файл с описанием лицензии.
-
use_mit_license()
– если вам нужна лицензия, чтобы люди могли использовать ваш код с минимальными ограничениями -
use_gpl_license()
- если вам нужна лицензия с авторским левом, чтобы все производные и пакеты вашего кода также имели открытый исходный код -
use_cc0_license()
- если ваш пакет в основном содержит данные, а не код, и вам нужны минимальные ограничения -
use_ccby_license()
– если ваш пакет содержит только данные, но вы хотите указания вашего авторства -
use_proprietary_license()
- если вы не хотите делать свой код открытым (На CRAN не пустят)
5.3.5 Imports, Suggests, Depends
- Пакеты, перечисленные в,
Imports
необходимы вашим пользователям во время выполнения и будут установлены (или потенциально обновлены), когда пользователи установят ваш пакет черезinstall.packages()
. - Пакеты, перечисленные в,
Suggests
либо необходимы для задач разработки, либо могут разблокировать дополнительные возможности пакета для ваших пользователей.
Для добавления необходимых пакетов в зависимости, т.е. в поля Imports
или Description
используйте функцию usethis::use_package()
.
usethis::use_package("dplyr") # Default is "Imports"
#> ✔ Adding 'dplyr' to Imports field in DESCRIPTION
#> • Refer to functions with `dplyr::fun()`
usethis::use_package("ggplot2", "Suggests")
#> ✔ Adding 'ggplot2' to Suggests field in DESCRIPTION
#> • Use `requireNamespace("ggplot2", quietly = TRUE)` to test if package is installed
#> • Then directly refer to functions with `ggplot2::fun()`
Так же вы можете использовать аргумент min_version
для указания минимальной или текущей версии пакета, от которого щависит ваш пакет:
# exact version
usethis::use_package("dplyr", min_version = "1.0.0")
# min version = currently installed version
usethis::use_package("dplyr", min_version = TRUE)
5.3.6 Другие поля
Выше я перечислил все обязательные поля файла DESCRIPTION, но вам также доступны некоторые другие поля:
-
Version
– Версия вашего пакета, удобный способ сообщить на какой версии разработки находится ваш пакет. -
LazyData
– актуален если ваш пакет делает данные доступными для пользователя. Если вы укажете LazyData: true, наборы данных загружаются отложенно, что делает их более доступными, т. е. пользователям не нужно использовать data(). -
Encoding
– Описывает кодировку файлов вашего пакета. -
Collate
- управляет порядком получения файлов R. -
VignetteBuilder
- перечисляет любой пакет, который нужен вашему пакету в качестве механизма виньетирования. -
SystemRequirements
- Здесь вы описываете зависимости, внешние по отношению к R. Это обычное текстовое поле, которое, например, фактически не устанавливает и не проверяет что-либо, поэтому вам может потребоваться включить дополнительные сведения об установке в файл README.
5.3.7 Пользовательские поля
Существует также некоторая гибкость для создания собственных полей для добавления дополнительных метаданных. В самом узком смысле единственным ограничением является то, что вы не должны переназначать официальные имена полей, используемые R. Вы также должны ограничить себя допустимыми английскими словами, чтобы имена полей не помечались проверкой орфографии.
На практике, если вы планируете отправлять в CRAN, мы рекомендуем, чтобы имя любого настраиваемого поля начиналось с Config/
.