如何在不覆盖现有版本的情况下测试R包更新?
如何在不重命名包的情况下同时安装同一R包的两个开发版本
当然可以,不用改包名也能同时存放并对比同一R包的两个开发版本,核心是通过独立的本地库路径来区分不同版本,具体操作步骤如下:
创建临时本地库目录
先在本地新建一个专门存放更新版本的库文件夹,比如在用户目录下创建:dir.create("~/R/temp_dev_lib", recursive = TRUE)这个目录完全独立于你平时安装R包的默认库,不会和现有版本冲突。
将更新后的包安装到临时库
根据你的包来源选择对应的安装命令,指定lib参数为刚才创建的临时库路径:- 如果你是从本地源码文件夹安装更新后的版本:
devtools::install(pkg = "path/to/your/updated/package", lib = "~/R/temp_dev_lib") - 如果你是从Git仓库的某个更新分支安装:
devtools::install_git("https://your/repository/url.git", ref = "your-updated-branch", lib = "~/R/temp_dev_lib")
- 如果你是从本地源码文件夹安装更新后的版本:
加载不同版本进行对比
因为同一R会话不能同时加载同一个包的两个版本,你可以通过两种方式对比:- 打开两个独立的R会话:一个用默认库加载原开发版本(
library(your_package)),另一个用lib.loc参数加载临时库的更新版本:library(your_package, lib.loc = "~/R/temp_dev_lib") - 在同一个会话中切换版本,先卸载当前加载的版本再加载另一个:
# 卸载当前版本 detach("package:your_package", unload = TRUE) # 加载原版本 library(your_package) # 切换到更新版本 detach("package:your_package", unload = TRUE) library(your_package, lib.loc = "~/R/temp_dev_lib")
- 打开两个独立的R会话:一个用默认库加载原开发版本(
清理临时版本
当你对比完成后,直接删除刚才创建的~/R/temp_dev_lib文件夹即可,不会对原开发版本造成任何影响。
另外可以用.libPaths()查看当前R的默认库路径,确保临时库没有被加入默认路径(避免误加载),如果不小心加了,用.libPaths(.libPaths()[-.libPaths() == "~/R/temp_dev_lib"])移除即可。
内容的提问来源于stack exchange,提问作者user19904
相关产品推荐
相关产品推荐

