Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to install R-packages not in the conda repositories?

I am using Anaconda to manage my R-installation. It works great for packages available in the R-channels provided by Anaconda, but I am having troubles installing packages not contained in the Anaconda repos.

I have tried a few different approaches, all listed below together with their error output.

1. install.packages('rafalib')

Suggested to work here conda - How to install R packages that are not available in "R-essentials"?. My .libPaths() points to '/home/user/anaconda2/lib/R/library'.

Out:

--- 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.

I installed tcl from the conda channel r-old, but install.packages() still threw the same error message.

2. options(menu.graphics=FALSE) and then install.packages('rafalib')

I got a list of mirrors and chose one.

Out:

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

Both 2 and 3 are from Disable/suppress tcltk popup for CRAN mirror selection in R

3. Setting the mirror in ~/.Rprofile

Before trying install.packages(), I added the following to my ~/.Rprofile.

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

Out:

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. Setting the download method to 'curl' or 'wget'.

While keeping the new ~/.Rprofile configuration. I guess this wasn't necessary since the package seems to be downloading fine now, but I tested it just in case.

Out:

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. Manual download of rafalib

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

Out:

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. Building a conda package from rafalib

I opened a separate issue for this Errors building R-packages for conda. In short, it complains about missing dependencies that I already have installed. Update I got a round the dependency problem and I am now stuck at the same rl_signal_event_hook-error as for my other approaches.

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

As per https://github.com/conda/conda/issues/1679, but it didn't fix the issue for me.


So it seems like I can now download the package fine, but installing it fails. I have seen the error message sh: symbol lookup error: sh: undefined symbol: rl_signal_event_hook previously when using R with irkernel in the Jupyter Notebook, but it has never obstructed my work. I have never seen anything relating to that error message when running python through anaconda.

I'm out of ideas. Does anyone know how I can install R-packages not provided by anaconda, such as rafalib or swirl?

I am on Linux (Antergos, an Arch derivative) with kernel 4.4.5-1-ARCH.


UPDATE 2016/04/15

There is some related discussion in this thread. I have tried to get around this error by installing different versions of ncurses, including this patched version, and I have tried to link the readline libraries, as suggested here, but I keep running into the same error. I'm quite lost at this point and any help to solve this would be greatly appreciated.

like image 520
joelostblom Avatar asked Apr 15 '16 16:04

joelostblom


People also ask

How do I install an R package locally?

First, we'll need to create a directory in the home directory, then set a variable to point R at that directory, and then install the package. and you're done. You can pick any directory to make your personal R library.

How do I manually download R packages?

Go into R, click on Packages (at the top of the R console), then click on "Install package(s) from local zip files", then find the zip file with arm from wherever you just saved it. Do the same thing to install each of the other packages you want to install.

Can you install R packages with conda?

The R language packages are available to install with conda at http://repo.anaconda.com/pkgs/r/. You can install any of these R language packages into your current environment with the conda command conda install -c r package-name .


2 Answers

Detailed post on managing packages that are and are not in Anaconda R: http://ihrke.github.io/conda.html

Essentially is using commands:

conda skeleton cran <package_name>
conda build <package_name>

If the package has dependencies that are also not in Anaconda:

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

Essentially I would agree with this post in saying that I don't understand how install.packages() works with Anaconda. What I seem to see is that Anaconda creates a R environment where all the packages installed from install.packages() are kept.

Whenever I am working in Jupyter with R, I use this environment and am able to access all the packages that I have installed with install.packages()

like image 116
rgalbo Avatar answered Oct 17 '22 11:10

rgalbo


In the end, I got around the rl_event_hookproblems by following the approach recommended here and symlinking anaconda's libreadline to the system one:

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

I am still having troubles installing some dependency heavy R-packages due to failure to load shared objects when using install.packages() from withing R. However, simpler packages work fine and I can get most of the dependency heavy packages from anacondas R-repositories.

like image 29
joelostblom Avatar answered Oct 17 '22 10:10

joelostblom