2013-02-15 2 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

+0

@ Арун рад, что ты сочтешь это полезным, мне было немного странно ответить на мой вопрос ... – juba

+6

@juba почему? Это даже поощряется. Возможно, вам нужно проверить, установлен ли пакет ... – agstudy

8

Другое решение этой проблемы - devmode от devtools. Devmode позволяет устанавливать пакеты в репозиторий dev, чтобы ваши другие пакеты были не затронуты, если вы устанавливаете версии для разработки. Например:

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

Вы заметите, что ваша версия не изменилась.

+0

Да, но пакеты остаются установленными в dev_mode, iiuc? – Arun

+0

+1 очень полезен, поскольку функция, которую я предоставил, не позволяет временно установить функции 'devtools', такие как' install_github'. Благодаря ! – juba

+0

@Arun Да, они делают.Но они отделены от ваших обычных пакетов. –

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' в вашей системе :-) –

+0

Ницца, не знал о' pacman'. – juba

4

В дополнение к ответу Тайлера функция p_temp была недавно добавлена ​​в pacman упаковка, который делает именно то, что задает вопрос.

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

Это временно установит пакет и любые зависимости.

Раскрытие: Тайлер и я соавторы в pacman пакет ...

+1

Возможно, это только я, но я думаю, что наконечник шляпы (даже если это шляпа на собаке в вашем аватаре) должен отправиться на @juba в документацию 'p_temp' для * сходства * между вашей функцией и его. Если это не так, по крайней мере ссылка в ссылках на этот вопрос. – A5C1D2H2I1M1N2O1R2T1

+1

@AnandaMahto Действительно. У меня это есть в моей локальной версии, но пока не подтолкнуло его к GitHub. – Dason

Смежные вопросы