仅加载一个功能的依赖项

时间:2019-01-10 14:39:47

标签: r plotly devtools roxygen2

我正在创建具有一些功能的包装。仅一个辅助功能需要plotly

但是,当我使用devtools进行安装时,得到了一个注释unused arguments in layout(yaxis = ay,...,然后我读了Hadley's article about imports vs depends。使用import不会删除注释,但是在NAMESPACE文件中添加plotlydepends可以解决此问题。

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

  

您永远不要在包中使用require()或library():相反,请使用DESCRIPTION中的Depends或Imports字段

我现在的问题是,使用plotly的函数更多地是软件包的附加组件。所有其他(更重要的)功能都可与base-R一起使用。 因此,我只想将plotly用于需要它的一个函数。

  1. 是否可以在install期间不创建笔记?
  2. 为什么requirelibrary在包内这么糟糕?
  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 :(得分:4)

为此使用建议

您可以在Writing R Extensions或Hadley的Package Basics: Decription中进行阅读。在这两种情况下,建议都是

  • 可选依赖项位于软件包Suggests的{​​{1}}字段中。
  • 在函数中使用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-这似乎毫无意义。 Hadley的建议似乎很清楚,可以使用requireNamespace来加载程序包,然后使用requireNamespace("plotly")来调用所需的函数。

如果您希望忽略此建议,则只需在第一次执行plotly::。使用require后跟requireNamespace是多余的。如您的链接中所述,require装入软件包而不附加它。 requireNamespace既加载又附加。