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)
你可以解决这个问题更简单:
- 每个项目都有一个顶级目录,调用
projA
、projB
、...
- 在其中的每一个中,创建一个目录
libs/
,比如说。
- 并且在每个目录中都有一个文件
.Rprofile
,其中包含一个单独的赋值,例如 .libPaths("./libs")
现在,当您在 不同的 项目目录中启动 R 时,每个目录都会在路径之前 separate 库目录,允许您放置每个项目在那里覆盖。
简而言之,此处概述的方法允许您随心所欲地保留 local 和 modified 包。 (如果您愿意,您甚至可以通过 .libPaths()
分配公共目录。)
好的是这会
- 使用任何 R 调用、批处理或 GUI 或 RStudio 或 shiny 或...
- 不依赖于任何其他工具,因此
- 不依赖于 RStudio 或
.Rprof
文件——尽管您也可以自由使用 RStudio。
与往常一样,Base R 随时为您服务。
我有几个正在使用的旧 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)
你可以解决这个问题更简单:
- 每个项目都有一个顶级目录,调用
projA
、projB
、... - 在其中的每一个中,创建一个目录
libs/
,比如说。 - 并且在每个目录中都有一个文件
.Rprofile
,其中包含一个单独的赋值,例如.libPaths("./libs")
现在,当您在 不同的 项目目录中启动 R 时,每个目录都会在路径之前 separate 库目录,允许您放置每个项目在那里覆盖。
简而言之,此处概述的方法允许您随心所欲地保留 local 和 modified 包。 (如果您愿意,您甚至可以通过 .libPaths()
分配公共目录。)
好的是这会
- 使用任何 R 调用、批处理或 GUI 或 RStudio 或 shiny 或...
- 不依赖于任何其他工具,因此
- 不依赖于 RStudio 或
.Rprof
文件——尽管您也可以自由使用 RStudio。
与往常一样,Base R 随时为您服务。