Мне нужно перейти на старую версию R, чтобы запустить один скрипт - PullRequest
0 голосов
/ 04 августа 2020

Я пытаюсь запустить сценарий, созданный на основе более старой версии R. Он работает на одном компьютере, на котором работает R / 3.4.4. Он ломается на другом, работающем под управлением R / 3.6.3. У автора есть проблема, обнаруженная в его гитхабе, чтобы исправить это (я думаю), но он заканчивает докторскую степень, так что это могло произойти через два месяца, два года или никогда.

Я установил R / 3.4.4 в моем пути $HOME/.local (другой находится в /usr/bin). Я просто не могу понять, как временно указать на версию в .local при запуске этого скрипта. Я попытался установить R_HOME с помощью export R_HOME=$HOME/.local, но R игнорирует это.

Я уверен, что об этом уже спрашивали раньше, но я не могу найти ничего, что не связано с RStudio. У меня нет RStudio на моем WSL (под управлением Ubuntu 20.04), поэтому мне нужно решение на основе терминала.

Может кто-нибудь объяснить, как это сделать? Я чувствую себя очень тупым и очень измученным. Спасибо.

Ответы [ 2 ]

2 голосов
/ 04 августа 2020

Изменение PATH может быть в некотором роде полезно, но поскольку (я предполагаю), что вы намереваетесь, что это будет исключение , то просто запуск этого с полным путем к исполняемому файлу должен быть достаточным. Если ваша задача инкапсулирована в сценарий с именем script.R, то, возможно, будет достаточно

$HOMD/.local/R_3.4.4/bin/x64/Rscript /path/to/script.R

.

Это может вас укусить, в зависимости от того, как установлен текущий R. Вы сказали, что это /usr/bin/, что предполагает, что его путь к библиотеке может быть примерно таким:

$ Rscript -e '.libPaths()'
[1] "/usr/local/lib/R/site-library"
[2] "/usr/lib/R/site-library"
[3] "/usr/lib/R/library"

(где Rscript - это текущая версия по умолчанию). К сожалению, пакеты в этих каталогах не хранятся с указанием версии c, поэтому возможно (даже вероятно), что использование более современной версии пакета с R-3.4.4 каким-то образом не сработает.

Две стратегии для предотвращения этой возможности. Первый работает нормально, если у вас есть все пакеты для R-3.4.4 в определенном каталоге c.

  1. Один из способов - установить R_LIBS_USER (env-var) для команда. Это может быть в той же командной строке, или им можно управлять через какой-нибудь .Renviron файл или аналогичный:

    $ mkdir -p .local/R-3.4.4/library
    $ R_LIBS_USER=~/.local/R-3.4.4/library Rscript -e '.libPaths()'
    [1] "/home/r2/.local/R-3.4.4/library"
    [2] "/usr/local/lib/R/site-library"
    [3] "/usr/lib/R/site-library"
    [4] "/usr/lib/R/library"
    

    При этом, если все необходимые пакеты находятся в этом первом пути, он никогда не будет посмотрите в других, чтобы не было конфликтов. Если ваш скрипт стабильный / неизменный, и вы не сломаете свой экземпляр R-3.4.4 в пределах .local, тогда ... все в порядке.

  2. Измените сам скрипт чтобы жестко контролировать пути к библиотекам. Переопределив R_HOME (env var), вы можете переопределить все значения по умолчанию.

    echo "R_HOME=~/.local/R-3.4.4" > .Renviron # current working directory, regardless of script.R
    Rscript /path/to/script.R
    

    Это предполагает, что .local/R_3.4.4 - это завершенная установка R ... требуется все базовое оборудование, а также любые другие пакеты, которые вы могли установить.

0 голосов
/ 04 августа 2020

Возможно, вы добавили к пути новый каталог ПОСЛЕ старого. Вы можете проверить это с помощью:

echo $PATH

Если это так, вам нужно добавить его ПЕРЕД пути. Предполагая, что вы устанавливаете его в /usr/local/bin, вам следует использовать следующую команду:

export PATH="/usr/local/bin:$PATH"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...