Загружать зависимости только для одной функции - PullRequest
0 голосов
/ 10 января 2019

Я создаю пакет с несколькими функциями. Требуется только одна вспомогательная функция plotly.

Однако, когда я устанавливаю с помощью devtools, я получаю примечание unused arguments in layout(yaxis = ay,... Затем я читаю статью Хэдли о imports против depends. Использование импорта не удаляет заметку, но добавление plotly с depends в файл NAMESPACE решает проблему.

Далее я читаю абзац о «Пути поиска». Здесь Хэдли утверждает, что

Никогда не следует использовать require () или library () в пакете: вместо этого используйте поля Depends или Imports в ОПИСАНИИ

Теперь моя проблема в том, что функция, использующая plotly, является скорее дополнением к пакету. Все остальные (более важные) функции работают с base-R. Поэтому я хочу использовать plotly только для той функции, которая в этом нуждается.

  1. Возможно ли это без создания заметки во время install?
  2. Почему require или library так плохо внутри упаковки?
  3. Было бы хорошо использовать requireNamespace, а затем require после этого?

Вот пример кода:

#' Some plotly function
#'
#' Some very long description
#'
#' @param x_vec A numeric vector
#' @param y_vec A numeric vector
#' @keywords Some keywords
#' @return A plotly object
#' @export
#' @examples

debugMinEx<-function(x_vec,y_vec){

ay <- list(title = "",zeroline = FALSE,showline = FALSE,
           showticklabels = FALSE, showgrid = FALSE,
           scaleanchor="x",scaleratio=1) ## empty axis
ax <- list(title = "",zeroline = FALSE,showline = FALSE,
           showticklabels = FALSE, showgrid = FALSE) ## empty axis
my_legend<-list(font = list(family = "sans-serif", size = 14, color = "#000000"),
                x = 0, y = -0.05,orientation = "h")

plot_ly() %>%
  add_trace(x=x_vec,y=y_vec,
            type='scatter',mode='lines') %>%
  layout(yaxis = ay,xaxis=ax,
          legend = my_legend)
}

1 Ответ

0 голосов
/ 10 января 2019

Использовать Предлагает для этого.

Вы можете прочитать об этом в Написание расширений R или в Основах пакета Хэдли: Описание . В обоих случаях рекомендуется

  • Необязательная зависимость указывается в поле Suggests вашего пакета DESCRIPTION.
  • Используйте if (requireNamespace) в функции, чтобы проверить, есть ли пакет.

Примерно так:

if (requireNamespace("plotly", quietly = TRUE)) {
      # do your plotly stuff
   } else {
      # do non-plotly stuff
      # maybe as simple as stop("Please install plotly to use this function")
   }

Что касается того, можете ли вы использовать require после requireNamespace - это кажется бессмысленным. Рекомендации Хэдли, кажется, достаточно ясны, чтобы использовать requireNamespace("plotly") для загрузки пакета и впоследствии использовать plotly:: для вызова необходимых функций.

Если вы предпочитаете игнорировать этот совет, просто сделайте require в первый раз. Использование requireNamespace с последующим require является излишним. Как объяснено в вашей ссылке, requireNamespace загружает пакет, не подключая его. require загружает и прикрепляет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...