У меня установлено несколько версий R (2.15 и 3.0.1), между которыми я часто переключаюсь. Я хочу убедиться, что когда я устанавливаю пакет в одной версии, он также будет присутствовать в другой (где это возможно), поэтому я попытался настроить следующую систему:
- Когда пакет установлен (в любой версии), запишите файл csv, ~/.Rinstalled, который содержит список всех установленных пакетов.
- Когда открывается новый сеанс R, проверьте, существует ли этот файл.
- Если файл существует, сравните этот список с пакетами, установленными в текущей запущенной версии R.
- Попытайтесь установить все недостающие пакеты.
Для этого у меня есть следующий код в моем .Rprofile:
mirrorSetup <- function() {
cat("Recursive Statement?\n")
require(utils)
if(file.exists("~/.Rinstalled")) {
packages <- as.vector(read.csv("~/.Rinstalled")[,2])
notInstalled <- packages[!(packages %in% rownames(installed.packages()))]
# Remove file on exit if we're in a different version of R.
if (length(notInstalled) > 0) {
on.exit({
unlink("~/.Rinstalled")
})
}
for (i in seq_along(notInstalled)) {
# Check if package installed via previous dependency in for loop
updated <- rownames(installed.packages())
if (notInstalled[i] %in% updated) {
next
}
# Try to install via Cran first, then Bioconductor if that fails
tryCatch({
utils::install.packages(notInstalled[i])
}, error = function(e) {
try({
source("http://bioconductor.org/biocLite.R")
biocLite(notInstalled[i])
}, silent = TRUE)
})
}
}
}
mirrorSetup()
Однако, когда этот код запускается, он рекурсивно вызывает mirrorSetup()
для utils::install.packages(notInstalled[i])
, и я понятия не имею, почему.
Вот пример вывода, показывающий, что он неоднократно пытается установить первый найденный пакет (ade4).
Recursive Statement?
Loading required package: utils
Trying to install ade4 from Cran...
trying URL 'http://cran.ms.unimelb.edu.au/src/contrib/ade4_1.5-2.tar.gz'
Content type 'application/x-tar' length 1375680 bytes (1.3 Mb)
opened URL
==================================================
downloaded 1.3 Mb
Recursive Statement?
Loading required package: utils
Trying to install ade4 from Cran...
trying URL 'http://cran.ms.unimelb.edu.au/src/contrib/ade4_1.5-2.tar.gz'
Content type 'application/x-tar' length 1375680 bytes (1.3 Mb)
opened URL
==================================================
downloaded 1.3 Mb
Любые идеи?
Recursive Statement?
или больше? Если бы только два, я бы попробовал заменитьmirrorSetup()
наinvisible(mirrorSetup())
. - person flodel   schedule 30.07.2013