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

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

Я вижу три опции:

  1. Run remove.packages() для всех неосновных пакетов и установите заново через install.packages(lib = "/path/to/new/location").
  2. переместить библиотеки (каталоги) с помощью mv и используйте символические ссылки, чтобы указать на новые местоположения (и в конечном итоге удалить символическую ссылку)
  3. использовать mv команда в Linux для перемещения каталогов оптом и обновления .Library.site на R_HOME/etc/Rprofile.site, как указано в R руководство по установке и администрированию
#1 тупой. Вариант № 2 должен работать, но кажется немного несостоятельной.

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

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

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


обновление 1 / уточнение: просто чтобы уточнить: я только миграция библиотек, без изменения версии R или версий пакетов. Обновление R или пакеты могут выполняться отдельно, но вопрос только в том, возможно ли перемещение библиотек. Кажется, что если необходимо обновить или переустановить все пакеты, чтобы убедиться, что все установлено правильно, то это путь, более похожий на Вариант #1, чем вариант #3.

обновление 2: Ответы на еще один такой пост есть некоторые хорошие идеи о том, как избежать этой проблемы при обновлении. Я не обновляю R, но предложение Дирка Эддельбюттеля не устанавливать пакеты в filetree R разумно.

1 ответов


опция #3 (копирование старой библиотеки в новую библиотеку) должна работать ... но если и только если вы запустите:

update.packages(checkBuilt=TRUE)

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

Edit: видя, что это просто движется вокруг шезлонгов .... Я собираюсь отступить от одобрения #3, Если вы перемещаете любую из базовых R установка. Это сработало для меня на Mac, но я не видел обещания в руководстве по установке и администрированию R или R FAQ, что это должны работа. Вы можете выполнить #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's fine. 
# Or just delete their directories.

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

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

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