Как установить R-пакеты не в репозитории conda?

Я использую Anaconda для управления моей R-установкой. Он отлично работает для пакетов, доступных на R-каналах, предоставляемых Anaconda, но у меня возникают проблемы при установке пакетов, не входящих в репозитории Anaconda.

Я пробовал несколько разных подходов, все перечисленные ниже вместе с выводом их ошибок.

1. install.packages('rafalib')

Предлагается поработать здесь conda - Как установить пакеты R, которых нет в "R-essentials"?, мой .libPaths() указывает на '/home/user/anaconda2/lib/R/library',

Из:

--- Please select a CRAN mirror for use in this session ---
Error in download.file(url, destfile = f, quiet = TRUE) : 
  unsupported URL scheme
Error: .onLoad failed in loadNamespace() for 'tcltk', details:
  call: fun(libname, pkgname)
  error: Can't find a usable init.tcl in the following directories: 
    /opt/anaconda1anaconda2anaconda3/lib/tcl8.5 ./lib/tcl8.5 ./lib/tcl8.5 ./library ./library ./tcl8.5.18/library ./tcl8.5.18/library

This probably means that Tcl wasn't installed properly.

Я установил tcl из канала Конда r-old, но install.packages() все равно выкинуло такое же сообщение об ошибке.

2. options(menu.graphics=FALSE) а потом install.packages('rafalib')

Я получил список зеркал и выбрал одно.

Из:

Selection: 15
trying URL 'http://cran.utstat.utoronto.ca/src/contrib/rafalib_1.0.0.tar.gz'
Content type 'application/x-gzip' length 11798 bytes (11 KB)
==================================================
downloaded 11 KB

sh: symbol lookup error: sh: undefined symbol: rl_signal_event_hook

The downloaded source packages are in
        ‘/tmp/Rtmphwpta0/downloaded_packages’
Warning message:
In install.packages("rafalib") :
  installation of package ‘rafalib’ had non-zero exit status

И 2, и 3 взяты из всплывающего окна Disable/ Suppress tcltk для выбора зеркала CRAN в R

3. Установка зеркала в ~/.Rprofile

Прежде чем пытаться install.packages()Я добавил следующее к моему ~/.Rprofile,

## Default repo
local({r <- getOption("repos");
       r["CRAN"] <- "http://cran.us.r-project.org"; 
       options(repos=r)})

Из:

trying URL 'http://cran.us.r-project.org/src/contrib/rafalib_1.0.0.tar.gz'
Content type 'application/x-gzip' length 11798 bytes (11 KB)
==================================================
downloaded 11 KB

sh: symbol lookup error: sh: undefined symbol: rl_signal_event_hook

The downloaded source packages are in
        ‘/tmp/RtmppIz9rT/downloaded_packages’
Warning message:
In install.packages("rafalib") :
  installation of package ‘rafalib’ had non-zero exit status

4. Установка метода загрузки на "curl" или "wget".

Сохраняя новый ~/.Rprofile configuration, Я полагаю, что в этом не было необходимости, так как пакет, кажется, загружается нормально, но я проверил это на всякий случай.

Из:

sh: symbol lookup error: sh: undefined symbol: rl_signal_event_hook
Warning in download.packages(pkgs, destdir = tmpd, available = available,  :
  download of package ‘rafalib’ failed
Warning message:
In download.file(url, destfile, method, mode = "wb", ...) :
  download had nonzero exit status

5. Ручная загрузка рафалиба

install.packages('../Downloads/rafalib_1.0.0.tar.gz', repos=NULL, type='source')

Из:

sh: symbol lookup error: sh: undefined symbol: rl_signal_event_hook
Warning message:
In install.packages("../Downloads/rafalib_1.0.0.tar.gz", repos = NULL,  :
  installation of package ‘../Downloads/rafalib_1.0.0.tar.gz’ had non-zero exit status

6. Создание пакета conda из rafalib

Я открыл отдельную проблему для этой ошибки сборки R-пакетов для Conda. Короче говоря, он жалуется на отсутствующие зависимости, которые я уже установил. Обновление Я получил круглую проблему зависимости, и теперь я застрял в том же rl_signal_event_hook- ошибка как и для других моих подходов.

7. sudo ln /usr/lib/libncursesw.so.6 /usr/lib/libncursesw.so.5

Согласно https://github.com/conda/conda/issues/1679, но это не решило проблему для меня.


Похоже, теперь я могу нормально загрузить пакет, но установить его не удается. Я видел сообщение об ошибке sh: symbol lookup error: sh: undefined symbol: rl_signal_event_hook ранее при использовании R с irkernel в Jupyter Notebook, но это никогда не мешало моей работе. Я никогда не видел ничего, касающегося этого сообщения об ошибке при запуске Python через Anaconda.

У меня нет идей. Кто-нибудь знает, как я могу установить R-пакеты, не предоставляемые Anaconda, такие как rafalib или же swirl?

Я на Linux (Antergos, производная от Arch) с ядром 4.4.5-1-ARCH.


ОБНОВЛЕНИЕ 2016/04/15

Есть некоторые связанные обсуждения в этой теме. Я попытался обойти эту ошибку, установив различные версии ncurses, включая эту исправленную версию, и я попытался связать библиотеки readline, как предлагается здесь, но я продолжаю сталкиваться с одной и той же ошибкой. Я довольно потерян в этой точке, и любая помощь для решения этой проблемы будет принята с благодарностью.

2 ответа

Решение

В итоге я обошёл rl_event_hookпроблемы, следуя подходу, рекомендованному здесь, и символической привязке libreadline anaconda к системному:

mv ~/anaconda3/lib/libreadline.s.6.2 ~/anaconda3/lib/libreadline.s.6.2.bak
ln -s /usr/lib/libreadline.so.6.3 ~/anaconda3/lib/libreadline.s.6.2

У меня все еще возникают проблемы при установке некоторых R-пакетов с зависимостью из-за невозможности загрузки общих объектов при использовании install.packages() Однако, более простые пакеты работают нормально, и я могу получить большую часть тяжелых пакетов зависимостей из R-репозиториев anacondas.

Подробный пост об управлении пакетами, которые есть и отсутствуют в Anaconda R: http://ihrke.github.io/conda.html

По сути использует команды:

conda skeleton cran <package_name>
conda build <package_name>

Если у пакета есть зависимости, которых также нет в Anaconda:

conda skeleton cran <dependency1>
conda skeleton cran <dependency2>
conda build <package_name>

По сути, я бы согласился с этим постом, говоря, что я не понимаю, как install.packages() работает с Анакондой. Мне кажется, что Anaconda создает среду R, в которой все пакеты, установленные из install.packages() хранятся.

Всякий раз, когда я работаю в Jupyter с R, я использую эту среду и могу получить доступ ко всем пакетам, которые я установил с install.packages()

Другие вопросы по тегам