Местоположение персональной библиотеки по умолчанию 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.