Установка всех пакетов CRAN, которые еще не установлены? - PullRequest
12 голосов
/ 30 января 2010

Следующие команды R установят все пакеты CRAN:

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

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

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

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

Ответы [ 5 ]

17 голосов
/ 31 января 2010

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

# 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)

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

13 голосов
/ 30 января 2010

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

2) Вы просматривали Представления задач CRAN и пакет 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> 

Редактировать: в ответ на ваши последующие действия:

a) Если пакет не проходит проверку R CMD в Linux и Windows, он не загружается в CRAN. Итак, эта работа выполнена.

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

2 голосов
/ 16 марта 2014

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

install.packages(available.packages()[,1])
0 голосов
/ 09 июля 2018

Лучше, если вы используете:

    check.and.install.Package<-function(package_name){
        if(!package_name%in%installed.packages()){
           install.packages(package_name)
        }
     }

вызовите функцию и проверьте, установлен ли требуемый пакет:

    check.and.install.Package("pkgName")
0 голосов
/ 02 апреля 2017

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

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")

Привет

...