Я недавно работал над этим для одного из моих пакетов. Вот мои новые строки Зависит, Импортирует и Предлагает
Depends: R (>= 2.15.0)
Imports: nlme, mvtnorm, KFAS (>= 0.9.11), stats, utils, graphics
Suggests: Hmisc, maps, xtable, stringr
статистика, утилиты и графика являются частью базы R, но пользователь может отсоединить их, и тогда мой пакет не будет работать. Если вы используете R из командной строки, вы можете подумать: «Зачем кому-то их отключать?». Но если пользователь использует RStudio, скажем, я мог бы видеть, как он проходит и «снимает галку» со всех пакетов. Странная вещь, тем не менее, я не хочу, чтобы мой пакет перестал работать, если они это сделают. Или они могли бы переопределить, скажем, функцию plot (или какую-то другую функцию), и тогда мой пакет потерпит неудачу.
У моего NAMESPACE есть следующие строки
import(KFAS)
import(stats)
import(utils)
import(graphics)
Я не хочу анализировать статистику, утилиты и графические функции, которые я использую, поэтому я импортирую все их пространства имен. Для KFAS мне нужны только 2 функции, но имена экспортированных функций менялись между версиями, поэтому я импортирую все пространство имен, а затем в тесте кода проверяю, какая версия у пользователя.
Для mvtnorm и nlme я использую только одну функцию, поэтому я импортирую только те. Я мог бы импортировать все пространство имен, но попытаться импортировать только то, что я действительно использую.
importFrom(mvtnorm, rmvnorm)
importFrom(nlme, fdHess)
Виньетки, в которых появляются пакеты с предложениями, имеют
require(package)
строк в них.
Для экспортируемых функций в моем NAMESPACE я немного разорван. CRAN стал строгим в том, чтобы не допустить ::: в код вашего пакета. Это означает, что если я не экспортирую функцию, я ограничиваю творческое повторное использование. С другой стороны, я понимаю необходимость экспортировать только те функции, которые вы намерены поддерживать, со стабильным списком аргументов и выводить их, в противном случае мы нарушаем пакеты друг друга, изменяя интерфейс функции.