Подтвердить что ты не робот

Миграция библиотек R

Я хотел бы переместить несколько R-библиотек (*) с одного диска на другой, на Linux, и хотел бы знать, является ли простой способ выполнимым и безопасным, или если я должен удалить и переустановить пакеты. Я понимаю, что местоположения библиотек идентифицируются с помощью .libPaths() и просмотрели руководство по установке и администрированию R, чтобы узнать о миграции библиотек, но не вижу рекомендуемого процесса.

Я воспринимаю три варианта:

  • Запустите remove.packages() для всех не-базовых пакетов и установите заново через install.packages(lib = "/path/to/new/location").
  • Переместите библиотеки (каталоги) с помощью mv и используйте символические ссылки, чтобы указать на новые местоположения (и в конечном итоге удалить символическую ссылку).
  • Используйте команду mv в Linux, чтобы переместить каталоги оптом и обновить .Library.site в R_HOME/etc/Rprofile.site, как предложено в R Установка и администрирование руководство

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

Безопасен ли №3 или есть серьезные проблемы с ним? Проблемы, которые я определил, - это права на доступ к каталогам и возможность того, что любая установка пакета хранит абсолютные пути, а не относительные пути (что кажется необоснованным и ненужным).

Что касается хранения абсолютных путей, я обнаружил, что rJava хранит расположение R_HOME в файле с именем run. Это не проблема библиотеки как таковая, но это один из признаков пакета (и хороший пакет), который хранит личную копию абсолютного пути.

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


ОБНОВЛЕНИЕ 1/Уточнение: просто для уточнения: я только переношу библиотеки, не изменяя версию R или версии пакетов. Обновление R или пакетов может выполняться отдельно, но вопрос заключается в том, возможно ли перемещение библиотек. Похоже, что если необходимо обновить или переустановить все пакеты, чтобы убедиться, что все установлено правильно, то это путь, более похожий на вариант №1, чем вариант № 3.

ОБНОВЛЕНИЕ 2: Ответы на другое сообщение SO имеют некоторые хорошие идеи о том, как избежать этой проблемы при обновлении. Я не обновляю R, но предложение Dirk Eddelbuettel о том, чтобы не устанавливать пакеты в filetree из R, является разумным.

4b9b3361

Ответ 1

Вариант № 3 (копирование старой библиотеки в новую библиотеку) должен работать... но тогда и только тогда, когда вы запускаете:

update.packages(checkBuilt=TRUE)

Таким образом, пакеты, которые необходимо перестроить для новых версий, будут обновлены. Часто бывает, что новые версии добавляют требования (например, предстоящее требование в 2.14.x для NAMESPACE).

Edit: Увидев, что это просто движется по шезлонгам... Я собираюсь отступить от одобрения № 3, если вы перемещаете какую-либо базовую установку R. Он работал у меня на Mac, но я не видел обещания в Руководстве по установке и администрированию R или часто задаваемых вопросах R, которые должны работать. Вы можете выполнить # 1 (что, вероятно, безопасно в различных условиях) в этой последовательности:

# In original installation, get the non-default package list:
save.pkg.list <- installed.packages()[is.na(installed.packages()[ , "Priority"]), 1]
save(save.pkg.list, file="pkglist.Rdata")
# If you want to use remove.packages() at this point it fine. 
# Or just delete their directories.

С недавно установленной версией R с параметрами .Libpaths, настроенными на ваши предпочтения (или даже с той же старой установкой):

load("pkglist.Rdata")
install.packages(save.pkg.list)

Просто перемещение пакетов в новую библиотеку, если исполняемые файлы R не были изменены, может быть успешным (при условии, что вы также измените .Libpaths), но у меня нет установки Linux, чтобы проверить ее или узнать, как любые указатели, установленные с помощью операций configure, будут быть затронутым.