使用R与git和packrat

rjs*_*jss 19 r packrat

我一直在使用git,但最近刚开始使用packrat.我希望我的存储库是自包含的,但同时我不想包含可用的CRAN包.似乎一旦在带有packrat的项目中打开R,它将尝试使用项目库中的包; 如果它们不可用,那么它将尝试从项目库中的src安装; 如果它们不可用,它将查看该计算机中安装的库.如果计算机中没有库; 它接下来会看CRAN吗?

我应该在git仓库中包含哪些文件(例如,packrat.lock)?

小智 36

您可以选择使用您希望为项目提供的包及其版本的源代码压缩包来设置外部类似CRAN的存储库.但是,默认行为是查看CRAN,正如您在问题中所确定的那样.查看packrat.lock文件,您将看到对于您在packrat中使用的每个包,都有一个名为source: CRAN(如果您已从CRAN下载文件的选项).

当您具有本地存储的包源文件时,所述包的锁定的内容将更改为以下内容:

Package: FooPackage Source: source Version: 0.4-4 Hash: 44foo4036fb68e9foo9027048d28 SourcePath: /Users/MyName/Documents/code/myrepo/RNetica

我对你的最后一个问题有点不清楚:What files should I include in my git repo as a minimum (e.g., packrat.lock)?但是我将把它作为a)组合使用哪个文件来运行packrat,以及b)哪些文件应该提交给git-repo.为了回答第一个问题,我通过对现有的R项目初始化packrat来说明.

当你运行时packrat::init(),会发生两件重要的事情(其中包括):1.所有的packrat脚手架,包括源码tarball等都是在:PackageName/packrat/.2. packrat/lib*/添加到.gitignore文件中.

因此,我们可以看到,任何事情packrat/lib*/都不需要提交给你的git-repo.这将保留以下3个文件:

  1. packrat/init.R
  2. packrat/packrat.lock
  3. packrat/packrat.opts

packrat.lock需要通过版本控制系统与他人合作; 它有助于保持私有库同步.packrat.opts允许您为packrat指定不同的项目特定选项.使用get_opts和自动生成该文件set_opts.将此文件提交到git-repo将确保为所有协作者维护您指定的任何选项.要提交给repo的最终文件是.Rprofile.该文件告诉R使用私有包库(当从项目目录启动R时).

根据您的需要,您可以选择将源tar球提交到存储库.如果您不希望它们在您的git-repo中可用,您只需添加packrat/src/到.gitignore即可.但是,这意味着访问git-repo的任何人都无法访问包源代码,文件将从CRAN下载,或者从源packrat.lock文件在文件中指定的任何地方下载.

从您的问题来看,听起来将packrat/src/文件夹内容提交到您的仓库可能就是您所需要的.

  • 有一个问题。`packrat.opts` 包含行 `local.repos: /usr/local/lib/R/site-library`,它可能无法跨平台工作。 (2认同)