Установка всех пакетов CRAN, которые еще не установлены?

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

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

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

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

мой вопрос: как я могу поручить R установить все пакеты CRAN, которые еще не установлены?

5 ответов


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

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

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> 

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

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

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


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

install.packages(available.packages()[,1])

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

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

в отношении


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

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

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

    check.and.install.Package("pkgName")