Ответ 1
Для этой цели вы можете использовать функцию installed.packages
. А именно:
installed.packages(lib.loc = "$HOME/my/R_lib/3.3.1")
Возвращаемый объект содержит много информации (большинство полей из каждого пакета DESCRIPTION
файл), но имена пакетов находятся в первом столбце. Итак, что-то вроде следующего должно сделать трюк:
inst <- installed.packages(lib.loc = "$HOME/my/R_lib/3.3.1")
install.packages(inst[,1], lib="$HOME/my/R_lib/3.4.1", dependencies=FALSE)
Чтобы ответить на дополнительный вопрос в комментариях:
Если ваша старая библиотека содержала пакеты из других источников, кроме CRAN, вам нужно будет сделать какую-то гимнастику на основе содержимого файлов DESCRIPTION
и, следовательно, будет зависеть от того, насколько хорошо автор пакета задокументировал ее. field
аргумента в файлах installed.packages
позволяет вам выбрать дополнительные поля из этих файлов. Областями интереса для определения источника пакета являются поля Repository
, URL
и Maintainer
. Вот несколько идей о том, как их разделить:
CRAN vs non-CRAN:
inst <- installed.packages(lib.loc = "$HOME/my/R_lib/3.3.1",
fields=c("URL","Repository","Maintainer"))
inst <- as.data.frame(inst, row.names=NA, stringsAsFactors=FALSE)
cran <- inst[inst$Repository%in%"CRAN",]
non_cran <- inst[!inst$Repository%in%"CRAN" & !inst$Priority%in%"base",]
Пакеты биокондукторов:
bioc <- inst[grepl("Bioconductor",inst$Maintainer),]
source("https://bioconductor.org/biocLite.R")
biocLite(pkgs=bioc$Packages)
Пакеты Github:
git <- non_cran[grepl("github", non_cran$URL),]
install.packages("devtools")
library(devtools)
for(i in seq(nrow(git))){
install_github(repo=gsub("http://github.com/","",git$URL[i]))
}