Местоположение персональной библиотеки по умолчанию R имеет значение null

Я обновил свой Ubuntu 16.04 до R 3.4.1. При установке первого необязательного пакета (например, lubridate) я получил сообщение:

Вы хотите создать личную библиотеку 'null' для установки пакетов в?

Это произошло как в RStudio, так и в командной строке R. Я удалил r-base-core и переустановил r-base и r-base-dev через apt-get и все еще имел проблемы.

Я заметил, что каталог /etc/R/ содержал четыре временных файла, которые существовали временно во время процесса установки, но исчезли к моменту завершения apt-get install r-base r-base-dev. Я снова установил его, чтобы быстро захватить и вставить эти файлы на рабочий стол. После повторной установки снова я скопировал их в /etc/R/ с помощью:

~/Desktop/temp$ sudo cp repositories.dpkg-new /etc/R/repositories
~/Desktop/temp$ sudo cp Rprofile.site.dpkg-new /etc/R/Rprofile.site
~/Desktop/temp$ sudo cp ldpaths.dpkg-new /etc/R/ldpaths
~/Desktop/temp$ sudo cp Makeconf.dpkg-new /etc/R/Makeconf

Второй шаг состоял в том, чтобы раскомментировать второй, как показано ниже, в /etc/R/Renviron. По-видимому, это недавнее изменение в упаковке r-base by @dirk-eddelbuettel.

# edd Jun 2017  Comment-out R_LIBS_USER
#R_LIBS_USER=${R_LIBS_USER-'~/R/x86_64-pc-linux-gnu-library/3.4'}
##R_LIBS_USER=${R_LIBS_USER-'~/Library/R/3.4/library'}

У меня вопрос из двух частей:

Ответ 1

Вы близки. Проблема заключается в "комментировании" этих строк, сделанных без проверки совместимости. Такая же проблема возникает, если вы пытаетесь установить библиотеку вручную в REPL, например, используя:

install.packages("survival")

С той разницей, что вы получаете ошибку "NA" вместо "null".

Решение для будущих обновлений R, если вы хотите минимальных проблем:

  • Восстановить/etc/R/Renviron до пакета по умолчанию, чтобы он не запрашивал ваш ввод (или просто перезаписывался) в следующий раз обновлялся R

  • Добавьте в свой домашний каталог Renviron, например $HOME/.Renviron, со следующим содержимым:

R_LIBS_USER="${HOME}/R/${R_PLATFORM}-library/3.4.1/"

Лично, каждый раз, когда R обновляет, я переустанавливаю все библиотеки с новой версией. Поэтому я буду изменять этот 3.4.1 с помощью 3.4.2 или любой другой новой версии, а затем переустановить библиотеки.

Если вы не хотите переустанавливать свои библиотеки, вы можете попробовать полностью удалить подкаталог версии, например:

R_LIBS_USER="${HOME}/R/${R_PLATFORM}-library/

чтобы ваши старые библиотеки были сразу видны с помощью R.

NB: Я не мог найти способ поместить R-версию внутри Renviron, к сожалению, но это может быть достигнуто с использованием .Rprofile(так как это может содержать R-код).

Ответ 2

На вашем компьютере ваша текущая библиотека названа в честь вашей версии R.

Например, моя текущая библиотека:

.libPaths()
[1] "/home/colin/R/x86_64-pc-linux-gnu-library/3.3"

так как моя текущая версия R - 3.3.

Итак, да, каждый раз, когда вы будете обновлять R, вы столкнетесь с этой проблемой lib. Обратите внимание, что вы можете установить путь к старой библиотеке с помощью .libPaths(new = "path/to/your/lib") или скопировать и вставить свою новую библиотеку в новую.

Колин

Ответ 3

Я нашел, что для меня наиболее подходящим решением было отредактировать /etc/R/Renviron.site:

# nano /etc/R/Renviron

И раскомментируйте строку, в которой он устанавливает переменную среды R_LIBS_USER.

Et voilà!

Я снова могу использовать library(), require() и install.packages() внутри R.