可视化和跟踪包开发状态

时间:2016-05-26 13:54:14

标签: r package-development package-design

有什么好方法可以跟踪开发状态和/或可视化所有R软件包之间的链接(以及它的#34;第三方"依赖关系)?

我通常会尝试应用"分而治之以及#34;到目前为止 - 未来5年的战略 - 导致相当多的包装具有明确的功能范围。但是我已经达到了这样一种状态:事情已经(可感知地)变得如此分散,以至于我无法绕过所有的依赖关系,并且#34;我在实际项目中需要的乐高积木在哪里?&#34 34;再说: - /

所以我想我正在寻找

  1. 所有包依赖项的地图表示
  2. 一些"包开发管理"框架/战略,占地面积最小

1 个答案:

答案 0 :(得分:1)

这是一种方法,但肯定有其他好的选择。 使用ìnstalled.packages()获取对所有包的引用的一种简单方法。如果您有多个库和解释器来分隔项目,则可以使用lib.loc为每个项目指定库位置。这将为您提供包裹及其信息的矩阵。其中一列是“优先级”。基础包将其设置为“推荐”或“基础”。如果你开始添加“我的”或类似于你自己的东西,这是一个过滤你自己的包的简单方法。

通过提供库路径从每个库中获取矩阵。

要查找自己的包,请从通常使用的存储库中减去包列表,例如。为mypkgs <- setdiff(installed.packages()[,1], available.packages()[,1])。然后减去基础包mypkgs <- setdiff(mypkgs, basePkgs)。 basePkgs来自miniCran并基于优先级过滤,如上所述。然后,您应该拥有自己构建的软件包列表。

然后使用miniCran中的makeDepGraph。它获取包名称和依赖关系的信息。您可以使用installed.packages提供它,或者如果您有多个库,只需使用rbind减少矩阵并删除重复项。然后用情节绘制它。

如果您只想查看自己的包之间的依赖关系,请按上述过滤掉其他包并将其提供给makeDepGraph。

一个例子:我有一个基本安装用于各种R的东西,另一个用于当前项目的库,带有一个独立的解释器。这是一个包“flowCore”(不是我写的)的例子。它来自Bioconductor存储库。为了论证,我不会减去bioconductor包,并假设这些是我的更好地解决你的问题。

require("miniCRAN")
#get package info
inst<-installed.packages()
other_inst<-installed.packages("/Users/lovetatting/Desktop/flowproj/lib/R-3.3.0/library")
cran<-available.packages()
#pick out your own packages
mypkgs<-lapply(list(inst, other_inst), function(inst){
  mine<-setdiff(
    setdiff(
      inst[,1], cran[,1]), 
    basePkgs())
})
#aggregate 
mypkgs<-Reduce(union, mypkgs)
allpkgs<-Reduce(rbind, list(inst, other_inst))

plot(makeDepGraph("flowCore", allpkgs, suggests=F))

这将导致下面的依赖图

enter image description here

如果您对跟踪依赖项有更多具体要求,您可以随时使用信息表单installed.packages。对于包开发我自己有一个小的bash函数库,主要是围绕R CMD ...和devtools调用的包装器。但也是为了照顾R文件夹中的文件夹层次结构限制等烦恼(我捆绑所有东西,然后安装)。