Как установить новый пакет R на старую несовместимую версию R

Я вынужден использовать R 3.2.2 из-за требований ИТ в моей компании. Мне нужно использовать несколько пакетов, которые технически требуют R> 3.2.2 (в основном, пророк версии 2 или выше). Я знаю, что иногда можно "обмануть" пакет для запуска в более старой несовместимой версии R, но я не уверен, как это сделать.

Я скачал пакет, используя более новую версию R, а затем отрегулировал файл описания, как предложил Патрик, здесь ( Как установить пакет R на R-3.3.0 из GitHub, который построен на R-3.4.0?), И переместил файл пакета в путь к библиотеке R 3.2.2, но это не сработало. Я получаю сообщение об ошибке "Ошибка: это R 3.2.2, пакет 'prophet' нуждается в>= 3.2.3."

У кого-нибудь есть идеи / предложения? Спасибо!

2 ответа

Решение

Предварительно: комментарий @prosoitos об использовании более старых версий пакетов, вероятно, будет лучшим выбором, если вы сможете их найти. Я считаю, что MRAN утверждает, что ежедневные версии всех пакетов возвращаются довольно далеко, наряду сcheckpoint пакет для замораживания состояния пакетов для вашего проекта. На самом деле, попробуйте использовать этот пакет, он может сделать некоторые из перечисленных ниже "хитростей" (пожалуйста, не используйте их случайно) ненужными.


Это правда, что некоторые пакеты могут "ложно требовать версии R", вместо этого удобно выбирать версию R, которую использует разработчик, и / или произвольную версию, которую они скопировали из другого пакета. Тем не мение:

  1. Вы не сможете узнать, является ли это истинным требованием, не зная внутренностей кода пакета.

    Если разработчик добросовестно использует правильно определенные требования к версии R, вы можете просмотреть историю коммитов пакета (при условии, что github, gitlab или какой-то другой доступный элемент управления версиями) и узнать, когда версия R изменилась в DESCRIPTIONи посмотрите на предыдущие коммиты, чтобы увидеть, какие изменения предложили увеличить версию. Если вам повезет, в самих сообщениях коммита будет что-то вроде "добавить аргумент xyz =, требующий более нового R", но я подозреваю, что это не гарантировано или даже не вероятно.

  2. В отсутствие этого может существовать одна функция (устаревшая или новая), для которой требуется более новая версия R, но больше ничего не изменилось. Это кажется мне правдоподобным, и опять же может потребоваться некоторая проверка для подтверждения.

  3. Даже если вы обнаружите это, вполне вероятно, что это зависит от других пакетов, которые имеют аналогично определенные требования к версии. Таким образом, даже если вы разберетесь в одном пакете, он может каскадно объединиться в несколько или десятки пакетов. (Подсказка: возможно checkpoint выглядит лучше, так как помогает в этом.)

Если вы каким-то образом определите, что либо (а) вы знаете, что требование R-версии неверно, либо (б) вы знаете, что оно требует, и готовы жить без этих аргументов или функций, тогда:

  1. Клонировать или скачать исходный код;
  2. редактировать DESCRIPTION и измените версию R, и я предлагаю вам также изменить номер версии пакета, чтобы вы знали, какую версию вы используете; и вы должны также отметить требования к версии для других пакетов, так как это может указывать на изменения API и т.д.; а также
  3. Сборка / установка локальной версии.

Но... в коде могут быть нюансы (и / или пример кода в документации), которые не будут работать в более старой версии. И то, что работает для одного пакета, не обязательно будет работать для другого.

Это истинный случай caveat emptor. Риск взлома кода высок. Вероятность выполнения этого ручного процесса для нескольких пакетов высока. Вероятность того, что все это работает с первого раза, невелика.

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

Это не точный ответ на ваш вопрос. Но вы слышали о conda менеджер пакетов (который универсален для языков программирования и многих других системных программ)?

Вы могли бы решить свою головную боль - без прав администратора - путем локальной установки более высоких версий R в виртуальную среду conda - и иметь ее и запускать в виртуальной среде.

Чтобы научиться пользоваться conda , уроки Кори Шефера очень хороши - они научат вас conda всего за 12 минут.... Анаконда - всего лишь вариант, но я использую миниконду - процедура и команда одинаковы.

# install miniconda on linux 64 bit on python 3.7 background
wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh

# linux 32 bit python 3.7
wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86.sh
bash Miniconda3-latest-Linux-x86.sh

# windows 64 bit python 3.7
wget https://repo.continuum.io/miniconda/Miniconda3-latest-Windows-x86_64.exe
# and run it 

# windows 32 bit python 3.7
wget https://repo.continuum.io/miniconda/Miniconda3-latest-Windows-x86.exe
# and run it

# other combinations and conditions and operating systems and python 2.7
# https://conda.io/miniconda.html

# after installation, in terminal, conda is available from 
# wherever you are.
# create conda environment for R-3.5.1 the newest
conda create --name R351
# enter the virtual environment
source activate R351
# install R-3.5.1
conda install -c r r-base
# start R
R
# quit R and quit the environment
source deactivate

Я долго искал проблемы с версиями, подобные этой. И это было самое чистое решение...

Но на самом деле также без conda, вы можете просто локально установить более высокие версии R (для этого вам не нужны права sudo) и запустить "/path/to/your/local/R-3.5.1/bin/R" - например, - Я действительно это делаю. Двоичные файлы или источники, которые вы получаете отсюда. Однако в этом случае вам часто приходится устанавливать пакеты с правами администратора.

С использованием .libPath() функция, вы можете получить полный контроль над тем, какие библиотеки - которые находятся в папках - должны быть доступны / использованы или нет. Смотрите здесь.

Другие вопросы по тегам