Ric*_*ton 57 versioning packages r
为了能够比较包的两个版本,我需要能够选择我加载的包的版本.R的软件包系统默认设置为覆盖现有软件包,因此您始终拥有最新版本.如何覆盖此行为?
到目前为止我的想法是:
我可以获取包源,编辑描述以提供不同的名称,并实际构建两个不同的包.我宁愿能够直接使用二进制文件,因为它不那么麻烦.
我不一定需要同时加载两个版本的软件包(只是同时安装在某个地方).我或许Sys.getenv('R_HOME')
可以改变R安装包.libpaths()
的地方,然后改变R寻找它们的地方.这看起来很酷,所以有没有人有更好的想法?
Dir*_*tel 58
您可以有选择地更改库路径.为了完全透明,请将两者都放在通常的路径之外,然后再做
library(foo, lib.loc="~/dev/foo/v1") ## loads v1
Run Code Online (Sandbox Code Playgroud)
和
library(foo, lib.loc="~/dev/foo/v2") ## loads v2
Run Code Online (Sandbox Code Playgroud)
install.packages()
当然,这同样适用.所有这些命令都有许多参数,因此您所针对的钩子可能已经存在.所以不要看改变R_HOME
,而是看help(install.packages)
(假设你从源代码安装).
但是AFAIK你不能在相同名称下加载两次相同的包.
Joz*_*zef 13
自接受的答案以来已经过去很多年了,当然这个答案仍然有效.然而,值得一提的是同时出现的一些新选择:
管理多个版本的包
要在项目(目录)级别管理多个版本的软件包,该packrat
工具可能很有用:https://rstudio.github.io/packrat/.简而言之
Packrat通过在其中存储包依赖项来增强项目目录,而不是依赖于在所有其他R会话中共享的个人R库.
这基本上意味着您的每个项目都可以拥有自己的"私有库",与用户和系统库隔离.如果您使用的是RStudio,packrat
它非常整齐且易于使用.
安装自定义包版本
在安装包的自定义版本方面,有很多方法,也许最方便的可能是使用devtools包,例如:
devtools::install_version("ggplot2", version = "0.9.1")
Run Code Online (Sandbox Code Playgroud)
或者,正如Richie所建议的那样,现在有一个更轻量级的包称为遥控器,它是将devtools分解成更小的包的结果,具有非常相似的用法:
remotes::install_version("ggplot2", version = "0.9.1")
Run Code Online (Sandbox Code Playgroud)
可以找到有关该主题的更多信息: