Ошибка при проверке — как-cran «нет пакета с именем …»

#r #package #cran

#r #пакет #cran

Вопрос:

У меня есть пересмотр пакета, в который я добавил некоторый код построения графика, который использует пакет ggplot2, а также настраиваемый масштаб из масштаба пакета. В частности, в новом коде есть одна строка, которая ссылается на пакет scales, вида:

 trans = scales::trans_new("new scale", ...)
  

Я отправил пакет в Winbuilder, чтобы проверить его, и я получаю эту ошибку:

 Error in loadNamespace(name) : there is no package called 'scales'
  

… и действительно, я получаю ту же ошибку, если запускаю R CMD check --as-cran

  • Да, scales установлен в моей системе.

  • Да, scales включен Suggests в мой DESCRIPTION файл; Я дважды и трижды проверял это.

  • Да, scales, похоже, является пакетом, все еще доступным в CRAN, с множеством и множеством обратных зависимостей.

У меня также есть десятки вызовов ggplot2::xxxx подпрограмм в моем коде, и ggplot2 также Suggests включен. Ошибок нет.

Что я могу делать неправильно?

Комментарии:

1. ggplot2 не находится в зависимости, и я использую ggplot2:: кучу раз таким же образом. Я определенно не хочу дополнительных вещей в зависимости.

2. Если у вас есть десятки вызовов к чему-то, то ваш пакет явно зависит от этого. Что произойдет с вашими пользователями, когда они попадут по этим ссылкам?

3. У меня есть requireNamespace() проверка, сопровождающая их. Я понял это. Смотрите мой ответ…

4. @Elin Размышляя об этом дальше, я бы сказал, что не следует ничего добавлять в Depends, если только пользователю действительно не нужен этот пакет в пути поиска. Для пакетов, необходимых для достижения основных целей пакета, они должны быть импортированы. В этом случае пользователи моего пакета могут никогда не использовать какие-либо из его возможностей построения графиков, поэтому я помещаю ggplot2 в Предложения и выполняю проверку пространства имен. Я думаю, что чрезмерные зависимости — это реальная проблема с R-пакетами. У многих есть сотни зависимостей, и это все, что нужно загрузить в память.

Ответ №1:

Я понял это; это было немного сложно (по крайней мере, для кого-то вроде меня).

В других местах моего пакета, где я вызываю функции из пакета Suggests , у меня также есть строка кода, которая выглядит следующим образом:

 if (!requireNamespace("ggplot2", quietly = TRUE))
    stop ("The 'ggplot2' package is not installed installed.", call. = FALSE)
... code that calls ggplot2:: functions
  

Проблема здесь заключалась в том, что (а) у меня не было такой проверки scales ; но что более важно, (б) приведенное выше назначение trans = scales::... было в пространстве имен моего пакета.

Итак, что я сделал, так это переместил назначение trans во внутреннюю часть функции, где оно используется, и предшествовал ему requireNamespace() тестом, аналогичным приведенному выше. Теперь моя проверка пакета, по крайней мере, проходит эту точку --as-cran проверки.