2010-01-30 4 views
12

Следующие команды R будут установлены все пакеты CRAN:Установка всех пакетов CRAN, которые еще не установлены?

availablePackages <- available.packages()[,1] 
install.packages(availablePackages) 

И следующую команду будет список всех установленных пакетов:

installedPackages <- .packages(all.available = TRUE) 

Мой вопрос: Как Поручаю R установить все CRAN пакеты, которые еще не установлены?

+1

Другой простой случай использования является создание ноутбук другому аналитику, который может работать в автономном режиме. Вместо того, чтобы пытаться предвидеть, какие пакеты они будут использовать, просто установите их все. Мой отдел использует этот подход при настройке ноутбуков аналитиков. – fmark

+1

'setdiff (буквы, буквы [5:15])' – baptiste

ответ

16

Честно говоря, я думаю, что это кропотливая работа ... это будет длиться в течение нескольких дней, даже недель (в зависимости от ресурсов), но вот код (я просто люблю делать тривиальные вещи):

# get names of installed packages 
packs <- installed.packages() 
exc <- names(packs[,'Package']) 

# get available package names 
av <- names(available.packages()[,1]) 

# create loooong string 
ins <- av[!av %in% exc] 
install.packages(ins) 

Я до сих пор не поймите, почему вы это делаете, но, эй ... некоторые вещи просто не предназначены ... Что меня больше всего волнует, так это то, что вы уже ответили на свой вопрос! Вы получили то, что вам было нужно, и вам просто нужно собрать все вместе ... Не хватает ли мы точки? У вас было что-то другое?!?

12

1) Почему вы хотите это сделать? Есть более 3500 (по состоянию на февраль 2012 года) из них?

2) Вы посмотрели CRAN Task Views и пакет ctv, который позволяет устанавливать пакеты из заданной задачи?

3) Вы полужирный шрифт вопрос простой индексации запросы можно сделать вручную (и, кроме того, также см help(sets))

R> available <- LETTERS     # a simple set 
R> installed <- LETTERS[c(1:10, 15:26)] # a simple subset 
R> available[ ! available %in% installed ] 
[1] "K" "L" "M" "N" 
R> 

Edit: в ответ на ваш последующий:

a) Если пакет не прошел проверку «R CMD» в Linux и Windows, он не загружается в CRAN. Так что работа выполнена.

b) Как все зависит от вашего конца, это тоже работа, как вы увидите. Мы сделали это для cran2deb, который находится на http://debian.cran.r-project.org (что делает полномасштабное здание пакета Debian, которое больше, чем просто установка). Мы получаем около 2050 из 2150 пакетов. Некоторые из нас отказываются строить из-за лицензии, некоторые из них мы не можем из-за недостающих заголовков или библиотек, и некоторые из них мы не можем построить, потому что им нужно, например. Пакеты BioConductor.

+0

Я хочу убедиться, что моя система имеет все правильные зависимости, и я тестирую это, пытаясь построить весь CRAN :-) Есть ли в CRAN много сломанных пакетов что я должен ожидать, не будет строить? – knorv

+0

Есть несколько, которые вы ожидаете, не будут строить, если у вас нет библиотек, установленных в стандартных местах. Например, rgdal предполагает, что GDAL установлен где-то, что может найти скрипт configure. Если вы установили его в нестандартном месте, вам нужно вручную указать R CMD INSTALL в нужное место. – Sharpie

+0

@ Dirk «Более двух тысяч» остается действительной оценкой, но я, ммм, позволил сократить остатки. – Iterator

2

тип этой команды, а затем все пакеты будут установлены автоматически:

 >install.packages(available.packages()[,1]) 
+3

как это улучшается по любому из предыдущих ответов? –

+1

Если это работает, то его очиститель – CodeGuyRoss

+1

Недостатком этого подхода является то, что ваша сессия может столкнуться с проблемой в какой-то момент и в конце. Использование подхода aL3xa означает, что каждый раз, когда вы запускаете код, у него меньше пакетов для установки, чем в прошлый раз, когда вы пытались его запустить. –

0

Я проверил это, и это работает

availablePackages=available.packages() 
availablePackages<-as.vector(availablePackages[,1]) 
installedPackages=.packages(all.available = TRUE) 
missedPackages<-setdiff(availablePackages, installedPackages) 
for (i in 1:length(missedPackages)) 
{ 
pkgName <- missedPackages[i] 
install.packages(pkgName) 
} 
print("END") 

С уважением

+0

Сколько времени прошло? – OganM