代码之家  ›  专栏  ›  技术社区  ›  Richie Cotton Joris Meys

如何使用同一个R包的多个版本?

  •  53
  • Richie Cotton Joris Meys  · 技术社区  · 14 年前

    为了能够比较包的两个版本,我需要能够选择加载包的哪个版本。默认情况下,r的包系统设置为覆盖现有的包,以便始终拥有最新版本。我该如何克服这种行为?

    到目前为止,我的想法是:

    我可以获取包源,编辑描述以给出不同的名称,并实际上构建两个不同的包。不过,我更希望能够直接使用二进制文件,因为这样就不那么麻烦了。

    我不需要同时加载两个版本的包(只是同时安装在某个地方)。我可能会搞砸 Sys.getenv('R_HOME') 更改r安装包的位置,然后 .libpaths() 改变R寻找它们的地方。不过,这看起来很糟糕,有人有更好的主意吗?

    2 回复  |  直到 6 年前
        1
  •  53
  •   Dirk is no longer here    14 年前

    您可以有选择地更改库路径。为了完全透明,请不要让这两种方法与通常的方法相冲突,然后再这样做。

     library(foo, lib.loc="~/dev/foo/v1")    ## loads v1
    

     library(foo, lib.loc="~/dev/foo/v2")    ## loads v2
    

    同样适用于 install.packages() 当然。所有这些命令都有许多参数,因此您要寻找的钩子可能已经存在。所以不要看变化 R_HOME 更确切地说,看看 help(install.packages) (假设从源安装)。

    但是,afaik不能以相同的名称加载同一个包两次。

        2
  •  8
  •   Jozef    6 年前

    自被接受的答案(当然仍然有效)以来已经过了很多年。然而,值得一提的是,同时出现了一些新的选择:

    管理包的多个版本

    要在项目(目录)级别管理多个版本的包,请 packrat 工具可能有用: https://rstudio.github.io/packrat/ . 简而言之

    packrat通过将包依赖项存储在项目目录中来增强项目目录,而不是依赖于在所有其他R会话中共享的个人R库。

    这基本上意味着每个项目都可以有自己的“私有库”,与用户库和系统库隔离开来。如果你在使用rstudio, 包装鼠 是非常整洁的综合和易于使用。

    安装自定义包版本

    在安装自定义版本的软件包方面,有许多方法,也许最方便的方法是使用 devtools 包,示例:

    devtools::install_version("ggplot2", version = "0.9.1")
    

    另外,正如Richie所建议的,现在有一个更轻的包,叫做 remotes 这是将devtools分解成更小的包的结果,其用法非常相似:

    remotes::install_version("ggplot2", version = "0.9.1")
    

    有关此主题的详细信息,请参阅: