Подтвердить что ты не робот

Почему roxygen2 автоматически не обновляет "Импорт" в файле DESCRIPTION?

Я стараюсь внимательно следить за @hadley book, чтобы узнать лучшие практики написания пакетов R. И я был в восторге, прочитав эти строки о философии книги:

все, что может быть автоматизировано, должно быть автоматизировано. Сделайте так же мало, как возможно вручную. Сделайте как можно больше функций.

Итак, когда я читал о зависимостях и (вроде) запутывающих различиях между директивами импорта в файле NAMESPACE и поле "Импорт:" в файле DESCRIPTION, я надеялся, что roxygen2 будет автоматически обрабатывать оба из них, После всего

Каждый пакет, указанный в NAMESPACE, также должен присутствовать в Импортирует или Зависит.

Я надеялся, что roxygen2 будет использовать каждый @import в моих функциях и убедиться, что он включен в файл DESCRIPTION. Но это не делает это автоматически.

Поэтому я либо должен добавить его вручную в файл DESCRIPTION, либо почти вручную, используя devtools::use_package.

Оглядываясь на ответ, я нашел это question в SO, где @hadley подтверждает в комментариях, что

В настоящее время робот пространства имен будет изменять NAMESPACE, но не ОПИСАНИЕ

и другие сообщения (например здесь или здесь), где collate_roclet, но "Это имеет значение только в том случае, если ваш код имеет побочные эффекты, чаще всего потому, что вы используете S4 ".

Интересно:

  • причина, по которой ОПИСАНИЕ не обновляется автоматически (что противоречит вышеупомянутой философии, которая, по-видимому, разделяется roxygen2) и
  • Если кто-то уже создал способ сделать это
4b9b3361

Ответ 1

namespace_roclet редактирует файл NAMESPACE на основе тегов, добавленных в script перед функцией. Поскольку существует три типа зависимостей (Depends, Imports и Suggests), аналогичный метод, используемый namespace_roclet, потребует трех разных тегов (уведомление Imports должно быть другим, чтобы различать это из пакетов для прикрепления в NAMESPACE).

Если вы хотите выполнить полуавтоматический процесс, вы можете определить используемые вами пакеты и добавить отсутствующие в DESCRIPTION в соответствующие разделы.

library(reinstallr)

package.dir <- getwd()
base_path   <- normalizePath(package.dir)
files       <- list.files(file.path(base_path, "R"), full.names = TRUE)
packages    <- unique(reinstallr:::scan_for_packages(files)$package)

packages

Ответ 2

Относительно двух пуль, о которых вы задумываетесь в нижней части:

  • Обновления файла DESCRIPTION могут быть дополнительно автоматизированы с помощью дополнительных roclets, однако уже > 4 года назад такой запрос на перенос был отложен: https://github.com/klutometis/roxygen/pull/76
  • Я должен предположить, что ребята действительно предпочли бы, чтобы вы использовали пакет devtools для обновления файла DESCRIPTION вместо того, чтобы добавлять его к roxygen2. Таким образом, в этом смысле devtools станет первым доступным выбором