RStudio:为每个 .Rproj 使用不同的包版本

RStudio: using different package versions for each .Rproj

我有几个正在使用的旧 R 项目,它们依赖于几个当前已弃用(或经过大量修改)的包。为了让一切顺利进行,我使用了这些包的旧版本,我将它们保存在另一个文件夹中,并在必要时手动加载 %userprofile%\documents\R\win-library.3。然而,这并不方便,特别是如果我想同时 运行 多个项目,其中一些需要新版本和更新版本的包。

我的问题 - 有没有办法为每个 .Rproj 指定自定义目录,从中获取和加载库?

一种选择是使用 Revolution Analytics 的 checkpoint 包。

您可以为项目中的每个主要 R 文件指明您希望加载一组包的日期。你可以阅读更多关于它的内容 here.

要从镜像中提取给定日期的快照包,请使用 getValidSnapshots(mranRootUrl = mranUrl())

创建检查点:

# Create temporary project and set working directory

example_project <- paste0("~/checkpoint_example_project_", Sys.Date())

dir.create(example_project, recursive = TRUE)
oldwd <- setwd(example_project)


# Write dummy code file to project

cat("library(MASS)", "library(foreach)",
    sep="\n",
    file="checkpoint_example_code.R")

# Create a checkpoint by specifying a snapshot date

library(checkpoint)
checkpoint("2014-09-17")

# Check that CRAN mirror is set to MRAN snapshot
getOption("repos")

# Check that library path is set to ~/.checkpoint
.libPaths()

# Check which packages are installed in checkpoint library
installed.packages()

# cleanup
unlink(example_project, recursive = TRUE)
setwd(oldwd)

你可以解决这个问题更简单:

  1. 每个项目都有一个顶级目录,调用projAprojB、...
  2. 在其中的每一个中,创建一个目录 libs/,比如说。
  3. 并且在每个目录中都有一个文件 .Rprofile,其中包含一个单独的赋值,例如 .libPaths("./libs")

现在,当您在 不同的 项目目录中启动 R 时,每个目录都会在路径之前 separate 库目录,允许您放置每个项目在那里覆盖。

简而言之,此处概述的方法允许您随心所欲地保留 localmodified 包。 (如果您愿意,您甚至可以通过 .libPaths() 分配公共目录。)

好的是这会

  1. 使用任何 R 调用、批处理或 GUI 或 RStudio 或 shiny 或...
  2. 不依赖于任何其他工具,因此
  3. 不依赖于 RStudio 或 .Rprof 文件——尽管您也可以自由使用 RStudio。

与往常一样,Base R 随时为您服务。