package.install с пользовательской библиотекой не может загружать пакеты - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь установить пакеты R с зависимостями в пользовательскую папку lib .Вот минимальный пример сценария (req.R):

dir.create("r_packages")
install.packages("R.utils", lib="r_packages")
library("R.utils", character.only = TRUE, lib.loc="r_packages")

Запуск этого с Rscript (например, в док-контейнере r-base ) показывает, что установка работает отлично , но загрузка пакеты не удается :

Вывод сокращен.Полная вставка здесь

$ Rscript req.R
also installing the dependencies ‘R.oo’, ‘R.methodsS3’

[...]

* installing *source* package ‘R.methodsS3’ ...
[...]
* DONE (R.methodsS3)
* installing *source* package ‘R.oo’ ...
[...]
* DONE (R.oo)
* installing *source* package ‘R.utils’ ...
[...]
* DONE (R.utils)

The downloaded source packages are in
        ‘/tmp/RtmpU4nBhU/downloaded_packages’
Error: package ‘R.oo’ required by ‘R.utils’ could not be found
Execution halted

Загрузка пакетов один за другим в обратном порядке зависимости работает нормально:

$ cat req.R
dir.create("r_packages")
#install.packages("R.utils", lib="r_packages")
library("R.methodsS3", character.only = TRUE, lib.loc="r_packages")
library("R.oo", character.only = TRUE, lib.loc="r_packages")
library("R.utils", character.only = TRUE, lib.loc="r_packages")


$ Rscript req.R
Warning message:
In dir.create("r_packages") : 'r_packages' already exists
R.methodsS3 v1.7.1 (2016-02-15) successfully loaded. See ?R.methodsS3 for help.
R.oo v1.22.0 (2018-04-21) successfully loaded. See ?R.oo for help.

Attaching package: ‘R.oo’

The following objects are masked from ‘package:methods’:

    getClasses, getMethods

The following objects are masked from ‘package:base’:

    attach, detach, gc, load, save

R.utils v2.8.0 successfully loaded. See ?R.utils for help.

Attaching package: ‘R.utils’

The following object is masked from ‘package:utils’:

    timestamp

The following objects are masked from ‘package:base’:

    cat, commandArgs, getOption, inherits, isOpen, parse, warnings

Кто-нибудь с подсказкой в ​​правильном направлении?Что я делаю не так?

1 Ответ

0 голосов
/ 16 апреля 2019

После некоторых исследований я обнаружил, что установка стандартного пути к библиотеке с помощью .libPaths() решила проблему.Очевидно, что функция library() не передает аргумент lib.loc последующим вызовам.

Это окончательный код:

dir.create("r_packages")
.libPaths(c("r_packages"))
install.packages("R.utils", lib="r_packages")
library("R.utils", character.only = TRUE, lib.loc="r_packages")
...