有時在堆棧溢出時,存在與我的系統上未安裝的軟件包有關的問題,以及我以後不打算重用的軟件包。臨時安裝R軟件包,僅用於當前會話
如果我安裝了包含install.packages()
的包,它將被放入我的一個R安裝庫中,然後將佔用一些存儲空間並在每次運行update.packages()
時進行更新。
有沒有辦法只爲當前R會話安裝軟件包?
有時在堆棧溢出時,存在與我的系統上未安裝的軟件包有關的問題,以及我以後不打算重用的軟件包。臨時安裝R軟件包,僅用於當前會話
如果我安裝了包含install.packages()
的包,它將被放入我的一個R安裝庫中,然後將佔用一些存儲空間並在每次運行update.packages()
時進行更新。
有沒有辦法只爲當前R會話安裝軟件包?
您可以用下面的函數臨時安裝一個軟件包:
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, ...)
}
,你可以用簡單的這樣:
tmp.install.packages("pkgname")
這個包被安裝在一個臨時目錄,它的文件應在下一次系統重啓時(至少在Linux系統上)被刪除。
此問題的另一種解決方案是devmode
從devtools
。如果您安裝開發版本,Devmode允許您將軟件包安裝到開發庫,以便其他軟件包不受影響。例如:
library(devtools)
devmode()
install_github('ggplot2', 'hadley')
devmode()
你會注意到你的版本沒有改變。
pacman
涉及包管理問題是這樣的:
library(pacman)
現在你可以使用:
p_load("pkgname") #installs or loads package if already installed
#at end of session:
p_delete("pkgname") #deletes package from lib
這是你的目錄中安裝,然後在年底將其刪除(快捷方式不是真正的臨時安裝)
但現在你在你的系統上有一個額外的包'pacman' :-) – 2013-02-15 15:05:06
不錯,不知道'pacman'。 – juba 2013-02-15 15:07:40
作爲泰勒的答案除了p_temp
函數最近被添加到pacman包,它完全符合問題要求。
library(pacman)
p_temp(pkgname) # or p_temp("pkgname") either work...
這將臨時安裝軟件包和任何依賴關係。
披露:泰勒和我是吃豆子包的合着者...
也許這只是我,但我認爲一個帽子的提示(即使它是你頭像上的狗的帽子)應該在'p_temp'文檔中的@juba中爲你的函數和他的*之間的相似性*。如果不是這樣,至少在這個問題的引用中有一個鏈接。 – A5C1D2H2I1M1N2O1R2T1 2013-03-26 09:44:43
@AnandaMahto確實。我有我的本地版本,但還沒有推到GitHub呢。 – Dason 2013-03-26 14:02:35
(+1),我覺得它有用。我希望你在發佈之前發佈了這個內容,就像我安裝了一百萬個包一樣:) – Arun 2013-02-15 14:47:55
@阿倫很高興你覺得這個有用,我覺得有點奇怪,回答我自己的問題... – juba 2013-02-15 14:49:17
@juba爲什麼?它甚至被鼓勵。也許你需要檢查包是否已安裝... – agstudy 2013-02-15 14:50:42