2013-02-15 49 views
22

有時在堆棧溢出時,存在與我的系統上未安裝的軟件包有關的問題,以及我以後不打算重用的軟件包。臨時安裝R軟件包,僅用於當前會話

如果我安裝了包含install.packages()的包,它將被放入我的一個R安裝庫中,然後將佔用一些存儲空間並在每次運行update.packages()時進行更新。

有沒有辦法只爲當前R會話安裝軟件包?

回答

22

您可以用下面的函數臨時安裝一個軟件包:

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系統上)被刪除。

+2

(+1),我覺得它有用。我希望你在發佈之前發佈了這個內容,就像我安裝了一百萬個包一樣:) – Arun 2013-02-15 14:47:55

+0

@阿倫很高興你覺得這個有用,我覺得有點奇怪,回答我自己的問題... – juba 2013-02-15 14:49:17

+6

@juba爲什麼?它甚至被鼓勵。也許你需要檢查包是否已安裝... – agstudy 2013-02-15 14:50:42

8

此問題的另一種解決方案是devmodedevtools。如果您安裝開發版本,Devmode允許您將軟件包安裝到開發庫,以便其他軟件包不受影響。例如:

library(devtools) 
devmode() 
install_github('ggplot2', 'hadley') 
devmode() 

你會注意到你的版本沒有改變。

+0

是的,但是軟件包仍然安裝在dev_mode,iiuc? – Arun 2013-02-15 15:00:02

+0

+1非常有用,因爲我提供的函數不允許使用'devtools'函數(如'install_github')臨時安裝。謝謝 ! – juba 2013-02-15 15:00:11

+0

@阿倫是的,他們這樣做。但它們與常規軟件包分開。 – 2013-02-15 15:21:22

8

pacman涉及包管理問題是這樣的:

library(pacman) 

現在你可以使用:

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

這是你的目錄中安裝,然後在年底將其刪除(快捷方式不是真正的臨時安裝)

+3

但現在你在你的系統上有一個額外的包'pacman' :-) – 2013-02-15 15:05:06

+0

不錯,不知道'pacman'。 – juba 2013-02-15 15:07:40

4

作爲泰勒的答案除了p_temp函數最近被添加到pacman包,它完全符合問題要求。

library(pacman) 
p_temp(pkgname) # or p_temp("pkgname") either work... 

這將臨時安裝軟件包和任何依賴關係。

披露:泰勒和我是吃豆子包的合着者...

+1

也許這只是我,但我認爲一個帽子的提示(即使它是你頭像上的狗的帽子)應該在'p_temp'文檔中的@juba中爲你的函數和他的*之間的相似性*。如果不是這樣,至少在這個問題的引用中有一個鏈接。 – A5C1D2H2I1M1N2O1R2T1 2013-03-26 09:44:43

+1

@AnandaMahto確實。我有我的本地版本,但還沒有推到GitHub呢。 – Dason 2013-03-26 14:02:35