仅加载一个函数的依赖项

5th*_*5th 3 r devtools roxygen2 plotly

我正在创建一个包含一些功能的包。只需要一项辅助功能plotly

但是,当我使用安装时,devtools我收到一条注释unused arguments in layout(yaxis = ay,...然后我阅读了Hadley 的关于vs 的文章importsdepends。使用 import 不会删除注释,但在 NAMESPACE 文件中添加plotlywith可以解决问题。depends

接下来我读了有关“搜索路径”的段落。哈德利在这里指出

您永远不应该在包中使用 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)
}
Run Code Online (Sandbox Code Playgroud)

Gre*_*gor 6

为此使用建议。

您可以在编写 R 扩展或 Hadley 的包基础知识:描述中阅读相关内容。在这两种情况下,建议是

  • 可选的依赖项位于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")
   }
Run Code Online (Sandbox Code Playgroud)

至于require之后是否可以使用requireNamespace——这似乎毫无意义。Hadley 的建议似乎非常清楚用于requireNamespace("plotly")加载包并随后用于plotly::调用所需的函数。

如果您想忽略此建议,那么只需require第一次即可。使用requireNamespace后跟require是多余的。正如您的链接中所解释的,requireNamespace加载包而不附加它。require加载和连接。