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

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

27 голосов
/ 20 августа 2011

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

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

  1. Запустите 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. Это не проблема библиотеки как таковая , но это одно из указаний на то, что пакет (и при этом хороший пакет) хранит личную копию абсолютного пути.

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


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

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

1 Ответ

28 голосов
/ 21 августа 2011

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

update.packages(checkBuilt=TRUE)

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

Редактировать: Видя, что это просто перемещается вокруг шезлонгов .... Я собираюсьотступить от одобрения № 3, если вы перемещаете любой из базовых R установки.Он работал для меня на Mac, но я не видел обещания в Руководстве по установке и администрированию 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 с установленными в ваших предпочтениях .Libpath (или даже той же старой установкой):

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

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

...