Для пакета R, как эффективно переместить пакет из Depends в Imports

Скажем, у меня есть пакет с 5 пакетами в Depends файла DESCRIPTION, и я только что понял, что не рекомендуется иметь столько пакетов в Depends из-за неизбежных конфликтов импорта, которые начинают появляться по мере увеличения количества импортируемых функций. увеличиваются. Я бы хотел переместить, скажем, только пакет pkg в Imports, но я понятия не имею, какие функции pkg используются в моем пакете. В идеале у меня должны быть модульные тесты с полным охватом исходного кода пакета, и, просто удалив pkg из зависимостей, я выявлю импорты, специфичные для pkg, из тестовых ошибок could not find function "foo". Но, к сожалению, у меня нет такой широты тестового покрытия. Мне было интересно, есть ли более эффективный способ, чем просмотр всего кода пакета, для идентификации этих импортов.


person aljabadi    schedule 07.01.2021    source источник
comment
@Al_J_Abadi, если ответ решает вашу проблему, вы должны принять его. См. здесь.   -  person Suren    schedule 08.01.2021


Ответы (1)


Это очень просто. Изменять

Depends: pkgA, pkgB, pgC

to

Imports: pkgA, pkgB, pgC

а также добавьте это в файл NAMESPACE:

import("pkgA")
import("pkgB")
import("pkgC")

который будет глобально импортировать все экспортированные символы, чтобы вы могли продолжить работу, как и раньше.

Вы также можете выборочно импортировать через

importFrom("pkgA", "func1", "func2", "func3")

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

И я не думаю, что у нас есть инструмент для удаления «фиктивного импорта». Обнаружение того, какие импорты могут быть неиспользованными, может быть чем-то, что вам нужно проверить вручную (но попытка удалить один и посмотреть, строит ли он все еще + проверяет нормально).

person Dirk Eddelbuettel    schedule 07.01.2021
comment
Спасибо, @dirk-eddelbuettel. Метод import('pkg') по-прежнему будет выдавать предупреждение о конфликте, и запуск R CMD check должен помочь. - person aljabadi; 07.01.2021