临时安装R软件包,仅适用于当前会话

jub*_*uba 22 r

有时在Stack Overflow上,有一个问题与我的系统上没有安装的软件包相关,我不打算稍后再使用.

如果我安装了软件包install.packages(),它将被放入我的一个R安装库中,然后将占用一些存储空间并在每次运行时进行更新update.packages().

有没有办法只为当前的R会话安装包?

jub*_*uba 23

您可以使用以下功能临时安装软件包:

tmp.install.packages <- function(pack, dependencies=TRUE, ...) {
  path <- tempdir()
  ## Add 'path' to .libPaths, and be sure that it is not
  ## at the first position, otherwise any other package during
  ## this session would be installed into 'path'
  firstpath <- .libPaths()[1]
  .libPaths(c(firstpath, path))
  install.packages(pack, dependencies=dependencies, lib=path, ...)
}
Run Code Online (Sandbox Code Playgroud)

你可以这样使用:

tmp.install.packages("pkgname")
Run Code Online (Sandbox Code Playgroud)

该软件包安装在一个临时目录中,其文件应在下次系统重启时删除(至少在Linux系统上).

  • @juba为什么?甚至鼓励它.也许您需要检查包是否已安装... (6认同)
  • (+1)我发现它很有用.我希望你在我安装像百万包之前发布过这个!:) (2认同)

seb*_*n-c 9

对于这个问题的另一个解决方案是devmodedevtools.Devmode允许您将软件包安装到dev存储库,以便在安装开发版本时不会触及其他软件包.例如:

library(devtools)
devmode()
install_github('ggplot2', 'hadley')
devmode()
Run Code Online (Sandbox Code Playgroud)

您会注意到您的版本没有更改.


Tyl*_*ker 8

pacman 处理像这样的包管理问题:

library(pacman)
Run Code Online (Sandbox Code Playgroud)

现在你可以使用:

p_load("pkgname")   #installs or loads package if already installed
#at end of session:
p_delete("pkgname") #deletes package from lib
Run Code Online (Sandbox Code Playgroud)

这是在您的目录中安装然后在最后删除它的快速方法(不是真正的临时安装)

  • 但是现在你的系统上有一个额外的包``pacman` :-) (3认同)

Das*_*son 5

作为泰勒答案的补充,最近在pacmanp_temp包中添加了一个函数,该函数完全符合问题的要求。

library(pacman)
p_temp(pkgname) # or p_temp("pkgname") either work...
Run Code Online (Sandbox Code Playgroud)

这将临时安装该包和任何依赖项。

披露:泰勒和我是pacman包的共同作者......