Install R

From TaiChimd
Jump to: navigation, search

Install Rtools for Windows users

See for a step-by-step instruction (based on Rtools30.exe) with screenshot. Note that in the step of 'Select Components', the default is 'Package authoring installation'. But we want 'Full installation to build 32 or 64 bit R'; that is, check all components (including tcl/tk) available. The "extra" files will be stored in subdirectories of the R source home directory. These files are not needed to build packages, only to build R itself. By default, the 32-bit R source home is C:\R and 64-bit source home is C:\R64. After the installation, these two directories will contain a new directory 'Tcl'.

My preferred way is not to check the option of setting PATH environment. But I manually add the followings to the PATH environment (based on Rtools v3.2.2)

C:\Program Files\R\R-3.2.2\bin\i386;

We can make our life easy by creating a file <Rcommand.bat> with the content (also useful if you have C:\cygwin\bin in your PATH although cygwin setup will not do it automatically for you.)

PS. I put <Rcommand.bat> under C:\Program Files\R folder. I create a shortcut called 'Rcmd' on desktop. I enter C:\Windows\System32\cmd.exe /K "Rcommand.bat" in the Target entry and "C:\Program Files\R" in Start in entry.

@echo off
set PATH=C:\Rtools\bin;c:\Rtools\gcc-4.6.3\bin
set PATH=C:\Program Files\R\R-3.2.2\bin\i386;%PATH%
set PKG_LIBS=`Rscript -e "Rcpp:::LdFlags()"`
set PKG_CPPFLAGS=`Rscript -e "Rcpp:::CxxFlags()"`
echo Setting environment for using R

So we can open the Command Prompt anywhere and run <Rcommand.bat> to get all environment variables ready! On Windows Vista, 7 and 8, we need to run it as administrator. OR we can change the security of the property so the current user can have an executive right.

Windows Toolset

Note that R on Windows supports Mingw-w64 (not Mingw which is a separate project). See here for the issue of developing a Qt application that links against R using Rcpp. And is the wiki for compiling Qt using MinGW and MinGW-w64.

Build R from its source on Windows OS (not cross compile on Linux)


First we try to build 32-bit R (tested on R 3.2.2 using Rtools33). At the end I will see how to build a 64-bit R.

Download (read create an empty directory, say c:/R/extsoft, and unpack it in that directory by e.g.

unzip -d c:/R/extsoft

Tcl: two methods

  1. Download tcl file from Unzip and put 'Tcl' into R_HOME folder.
  2. If you have chosen a full installation when running Rtools, then copy C:/R/Tcl or C:/R64/Tcl (not the same) to R_HOME folder.

Open a command prompt as Administrator"

set PATH=c:\Rtools\bin;c:\Rtools\gcc-4.6.3\bin
set PATH=%PATH%;C:\Users\brb\Downloads\R-3.2.2\bin\i386;c:\windows;c:\windows\system32
set TMPDIR=C:/tmp

tar --no-same-owner -xf R-3.2.2.tar.gz
cp -R c:\R64\Tcl c:\Users\brb\Downloads\R-3.2.2

cd R-3.2.2\src\gnuwin32
cp MkRules.dist MkRules.local
# Modify MkRules.local file; specifically uncomment + change the following 2 flags.
# LOCAL_SOFT = c:/R/extsoft


If we see an error of texi2dvi() complaining pdflatex is not available, it means a vanilla R is successfully built.

If we want to build the recommended packages (MASS, lattice, Matrix, ...) as well, run (check all make option in <R_HOME\src\gnuwin32\Makefile>)

make recommended

If we need to rebuild R for whatever reason, run

make clean

If we want to build R with debug information, run

make DEBUG=T

NB: 1. The above works for creating 32-bit R from its source. If we want to build 64-bit R from its source, we need to modify MkRules.local file to turn on the MULTI flag.

MULTI = 64

and reset the PATH variable

set PATH=c:\Rtools\bin;c:\Rtools\gcc-4.6.3\bin
set PATH=%PATH%;C:\Users\brb\Downloads\R-3.2.2\bin\x64;c:\windows;c:\windows\system32

I don't need to mess up with other flags like BINPREF64, M_ARCH, AS_ARCH, RC_ARCH, DT_ARCH or even WIN. The note is kind of old and is not needed. 2. If we have already built 32-bit R and want to continue to build 64-bit R, it is not enough to run 'make clean' before run 'make' again since it will give an error message incompatible ./libR.dll.a when searching for -lR in building Rgraphapp.dll. In fact, libR.dll.a can be cleaned up if we run 'make distclean' but it will also wipe out /bin/i386 folder:(

See also Create_a_standalone_Rmath_library below about how to create and use a standalone Rmath library in your own C/C++/Fortran program. For example, if you want to know the 95-th percentile of a T distribution or generate a bunch of random variables, you don't need to search internet to find a library; you can just use Rmath library.

Build R from its source on Linux (cross compile)

Compile and install an R package

Command line

cd C:\Documents and Settings\brb
C:\progra~1\r\r-2.15.2\bin\R CMD INSTALL --build affxparser_1.30.2.tar.gz

N.B. the --build is used to create a binary package (i.e. In the above example, it will both install the package and create a binary version of the package. If we don't want the binary package, we can ignore the flag.

R console

install.packages("C:/Users/USERNAME/Downloads/DESeq2paper_1.3.tar.gz", repos=NULL, type="source")

See Chapter 6 of R Installation and Administration

Check/Upload to CRAN

64 bit toolchain

See January 2010 email and R-Admin manual.

From R 2.11.0 there is 64 bit Windows binary for R.

Install R using binary package on Linux OS


sudo apt-key adv --keyserver --recv-keys E084DAB9
# Some people have reported difficulties using this approach. The issue is usually related to a firewall blocking port 11371
# So alternatively (no sudo is needed in front of the gpg command)
# gpg --keyserver --recv-key E084DAB9
# gpg -a --export E084DAB9 | sudo apt-key add -
sudo nano /etc/apt/sources.list
# For Ubuntu 14.04 (codename is trusty;
# deb trusty/
# deb-src trusty/
sudo apt-get update
sudo apt-get install r-base

Manually create the public key file if the gpg command failed.

Ubuntu/Debian goodies

Since the R packages XML & RCurl & httr are frequently used by other packages (e.g. miniCRAN), it is useful to run the following so the install.packages("c(RCurl", "XML", "httr")) can work without hiccups.

sudo apt-get update
sudo apt-get install libxml2-dev
sudo apt-get install curl libcurl4-openssl-dev
sudo apt-get install libssl-dev

See also Simple bash script for a fresh install of R and its dependencies in Linux.

To find out the exact package names (in the situation the version number changes, not likely with these two cases: xml and curl), consider the following approach

# Search 'curl' but also highlight matches containing both 'lib' and 'dev'
> apt-cache search curl | awk '/lib/ && /dev/'
libcurl4-gnutls-dev - development files and documentation for libcurl (GnuTLS flavour)
libcurl4-nss-dev - development files and documentation for libcurl (NSS flavour)
libcurl4-openssl-dev - development files and documentation for libcurl (OpenSSL flavour)
libcurl-ocaml-dev - OCaml libcurl bindings (Development package)
libcurlpp-dev - c++ wrapper for libcurl (development files)
libflickcurl-dev - C library for accessing the Flickr API - development files
libghc-curl-dev - GHC libraries for the libcurl Haskell bindings
libghc-hxt-curl-dev - LibCurl interface for HXT
libghc-hxt-http-dev - Interface to native Haskell HTTP package HTTP
libresource-retriever-dev - Robot OS resource_retriever library - development files
libstd-rust-dev - Rust standard libraries - development files
lua-curl-dev - libcURL development files for the Lua language

If we need to install 'rgl' and related packages,

sudo apt install libcgal-dev libglu1-mesa-dev
sudo apt install libfreetype6-dev

Windows Subsystem for Linux

Redhat el6

It should be pretty easy to install via the EPEL:

Just follow the instructions to enable the EPEL OR using the command line

sudo rpm -ivh
sudo yum update # not sure if this is necessary

and then from the CLI:

sudo yum install R

Install R from source (ix86, x86_64 and arm platforms, Linux system)

Debian system (focus on arm architecture with notes from x86 system)

Simplest configuration

<Method 1 of installing requirements>

On my debian system in Pogoplug (armv5), Raspberry Pi (armv6) OR Beaglebone Black & Udoo(armv7), I can compile R. See R's admin manual. If the OS needs x11, I just need to install 2 required packages.

  • install gfortran: apt-get install build-essential gfortran (gfortran is not part of build-essential)
  • install readline library: apt-get install libreadline5-dev (pogoplug), apt-get install libreadline6-dev (raspberry pi/BBB), apt-get install libreadline-dev (Ubuntu)

Note: if I need X11, I should install

  • libX11 and libX11-devel, libXt, libXt-devel (for fedora)
  • libx11-dev (for debian) or xorg-dev (for pogoplug/raspberry pi/BBB/Odroid debian). See here for the difference of x11 and Xorg.

and optional

  • texinfo (to fix 'WARNING: you cannot build info or HTML versions of the R manuals')

<Method 2 of installing requirements (recommended)>

Note that it is also safe to install required tools via (please run sudo nano /etc/apt/sources.list to include the source repository of your favorite R mirror, such as deb-src xenial/ and also run sudo apt-get update first)

sudo apt-get build-dep r-base

The above command will install R dependence like jdk, tcl, tex, X11 libraries, etc. The apt-get build-dep gave a more complete list than apt-get install r-base-dev for some reasons.

[Arm architecture] I also run apt-get install readline-common. I don't know if this is necessary. If x11 is not needed or not available (eg Pogoplug), I can add --with-x=no option in ./configure command. If R will be called from other applications such as Rserve, I can add --enable-R-shlib option in ./configure command. Check out ./configure --help to get a complete list of all options.

After running

tar xzvf R-3.2.3.tar.gz
cd R-3.2.3
./configure --enable-R-shlib

(--enable-R-shlib option will create a shared R library in $RHOME/lib subdirectory. This allows R to be embedded in other applications. See Embedding R.) I got

R is now configured for armv5tel-unknown-linux-gnueabi

  Source directory:          .
  Installation directory:    /usr/local

  C compiler:                gcc -std=gnu99  -g -O2
  Fortran 77 compiler:       gfortran  -g -O2

  C++ compiler:              g++  -g -O2
  Fortran 90/95 compiler:    gfortran -g -O2
  Obj-C compiler:

  Interfaces supported:
  External libraries:        readline
  Additional capabilities:   NLS
  Options enabled:           shared R library, shared BLAS, R profiling

  Recommended packages:      yes

configure: WARNING: you cannot build info or HTML versions of the R manuals
configure: WARNING: you cannot build PDF versions of the R manuals
configure: WARNING: you cannot build PDF versions of vignettes and help pages
configure: WARNING: I could not determine a browser
configure: WARNING: I could not determine a PDF viewer

After that, we can run make to create R binary. If the computer has multiple cores, we can run make in parallel by using the -j flag (for example, '-j4' means to run 4 jobs simultaneously). We can also add time command in front of make to report the make time (useful for benchmark).

# make -j4
# time make

PS 1. On my raspberry pi machine, it shows R is now configured for armv6l-unknown-linux-gnueabihf and on Beaglebone black it shows R is now configured for armv7l-unknown-linux-gnueabihf.

PS 2. On my Beaglebone black, it took 2 hours to run 'make', Raspberry Pi 2 took 1 hour, Odroid XU4 took 23 minutes and it only took 5 minutes to run 'make -j 12' on my Xeon W3690 @ 3.47Ghz (6 cores with hyperthread) based on R 3.1.2. The timing is obtained by using 'time' command as described above.

PS 3. On my x86 system, it shows

R is now configured for x86_64-unknown-linux-gnu

  Source directory:          .
  Installation directory:    /usr/local

  C compiler:                gcc -std=gnu99  -g -O2
  Fortran 77 compiler:       gfortran  -g -O2

  C++ compiler:              g++  -g -O2
  Fortran 90/95 compiler:    gfortran -g -O2
  Obj-C compiler:

  Interfaces supported:      X11, tcltk
  External libraries:        readline, lzma
  Additional capabilities:   PNG, JPEG, TIFF, NLS, cairo
  Options enabled:           shared R library, shared BLAS, R profiling, Java

  Recommended packages:      yes

[arm] However, make gave errors for recommanded packages like KernSmooth, MASS, boot, class, cluster, codetools, foreign, lattice, mgcv, nlme, nnet, rpart, spatial, and survival. The error stems from gcc: SHLIB_LIBADD: No such file or directory. Note that I can get this error message even I try install.packages("MASS", type="source"). A suggested fix is here; adding perl = TRUE in sub() call for two lines in src/library/tools/R/install.R file. However, I got another error shared object '' not found. See also To build R without recommended packages like ./configure --without-recommended.

make[1]: Entering directory `/mnt/usb/R-2.15.2/src/library/Recommended'
make[2]: Entering directory `/mnt/usb/R-2.15.2/src/library/Recommended'
begin installing recommended package MASS
* installing *source* package 'MASS' ...
** libs
make[3]: Entering directory `/tmp/Rtmp4caBfg/R.INSTALL1d1244924c77/MASS/src'
gcc -std=gnu99 -I/mnt/usb/R-2.15.2/include -DNDEBUG  -I/usr/local/include    -fpic  -g -O2  -c MASS.c -o MASS.o
gcc -std=gnu99 -I/mnt/usb/R-2.15.2/include -DNDEBUG  -I/usr/local/include    -fpic  -g -O2  -c lqs.c -o lqs.o
gcc -std=gnu99 -shared -L/usr/local/lib -o MASSSHLIB_EXT MASS.o lqs.o SHLIB_LIBADD -L/mnt/usb/R-2.15.2/lib -lR
gcc: SHLIB_LIBADD: No such file or directory
make[3]: *** [MASSSHLIB_EXT] Error 1
make[3]: Leaving directory `/tmp/Rtmp4caBfg/R.INSTALL1d1244924c77/MASS/src'
ERROR: compilation failed for package 'MASS'
* removing '/mnt/usb/R-2.15.2/library/MASS'
make[2]: *** [MASS.ts] Error 1
make[2]: Leaving directory `/mnt/usb/R-2.15.2/src/library/Recommended'
make[1]: *** [recommended-packages] Error 2
make[1]: Leaving directory `/mnt/usb/R-2.15.2/src/library/Recommended'
make: *** [stamp-recommended] Error 2
[email protected]:/mnt/usb/R-2.15.2#
[email protected]:/mnt/usb/R-2.15.2# bin/R

R version 2.15.2 (2012-10-26) -- "Trick or Treat"
Copyright (C) 2012 The R Foundation for Statistical Computing
ISBN 3-900051-07-0
Platform: armv5tel-unknown-linux-gnueabi (32-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library(MASS)
Error in library(MASS) : there is no package called 'MASS'
> library()
Packages in library '/mnt/usb/R-2.15.2/library':

base                    The R Base Package
compiler                The R Compiler Package
datasets                The R Datasets Package
grDevices               The R Graphics Devices and Support for Colours
                        and Fonts
graphics                The R Graphics Package
grid                    The Grid Graphics Package
methods                 Formal Methods and Classes
parallel                Support for Parallel computation in R
splines                 Regression Spline Functions and Classes
stats                   The R Stats Package
stats4                  Statistical Functions using S4 Classes
tcltk                   Tcl/Tk Interface
tools                   Tools for Package Development
utils                   The R Utils Package
> gc()
         used (Mb) gc trigger (Mb) max used (Mb)
Ncells 170369  4.6     350000  9.4   350000  9.4
Vcells 163228  1.3     905753  7.0   784148  6.0


PS 4. The complete log of building R from source is in here File:Build R log.txt

Full configuration

  Interfaces supported:      X11, tcltk
  External libraries:        readline
  Additional capabilities:   PNG, JPEG, TIFF, NLS, cairo
  Options enabled:           shared R library, shared BLAS, R profiling, Java

Update: R 3.0.1 on Beaglebone Black (armv7a) + Ubuntu 13.04

See the page here.

Update: R 3.1.3 & R 3.2.0 on Raspberry Pi 2

It took 134m to run 'make -j 4' on RPi 2 using R 3.1.3.

But I got an error when I ran './configure; make -j 4' using R 3.2.0. The errors start from compiling <main/connections.c> file with 'undefined reference to ....'. The gcc version is 4.6.3.

Raspbian stretch on Pi zero W

Edit /etc/apt/sources.list and add the following 2 lines

deb stretch main contrib non-free rpi
deb-src stretch main contrib non-free rpi

Now it is ready to run sudo apt-get build-dep r-base. Note that this will install lots of packages:

[email protected]:~ $ sudo apt-get build-dep r-base
Reading package lists... Done
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  adwaita-icon-theme autoconf automake autopoint autotools-dev bison ca-certificates-java dconf-gsettings-backend
  dconf-service debhelper default-jdk default-jdk-headless default-jre default-jre-headless dh-autoreconf
  dh-strip-nondeterminism fontconfig fontconfig-config fonts-cabin fonts-comfortaa fonts-croscore
  fonts-crosextra-caladea fonts-crosextra-carlito fonts-dejavu-core fonts-dejavu-extra fonts-ebgaramond
  fonts-ebgaramond-extra fonts-font-awesome fonts-freefont-otf fonts-freefont-ttf fonts-gfs-artemisia
  fonts-gfs-complutum fonts-gfs-didot fonts-gfs-neohellenic fonts-gfs-olga fonts-gfs-solomos fonts-junicode
  fonts-lato fonts-linuxlibertine fonts-lmodern fonts-lobster fonts-lobstertwo fonts-noto-hinted
  fonts-oflb-asana-math fonts-roboto-hinted fonts-sil-gentium fonts-sil-gentium-basic fonts-sil-gentiumplus
  fonts-sil-gentiumplus-compact fonts-stix gettext gfortran gfortran-6 gir1.2-freedesktop gir1.2-glib-2.0
  gir1.2-pango-1.0 glib-networking glib-networking-common glib-networking-services gsettings-desktop-schemas
  gtk-update-icon-cache hicolor-icon-theme icu-devtools intltool-debian java-common libarchive-zip-perl libasyncns0
  libatk-bridge2.0-0 libatk-wrapper-java libatk-wrapper-java-jni libatk1.0-0 libatk1.0-data libatspi2.0-0
  libavahi-client3 libbison-dev libblas-common libblas-dev libblas3 libbz2-dev libcairo-gobject2
  libcairo-script-interpreter2 libcairo2 libcairo2-dev libcolord2 libcroco3 libcups2 libcupsimage2
  libcurl4-openssl-dev libdatrie1 libdconf1 libepoxy0 libexpat1-dev libfile-stripnondeterminism-perl libflac8
  libfontconfig1 libfontconfig1-dev libfontenc1 libgdk-pixbuf2.0-0 libgdk-pixbuf2.0-common libgfortran-6-dev
  libgfortran3 libgif7 libgirepository-1.0-1 libgl1-mesa-glx libglapi-mesa libglib2.0-bin libglib2.0-dev
  libgraphite2-3 libgraphite2-dev libgs9 libgs9-common libgtk-3-0 libgtk-3-common libgtk2.0-0 libgtk2.0-common
  libharfbuzz-dev libharfbuzz-gobject0 libharfbuzz-icu0 libharfbuzz0b libice-dev libice6 libicu-dev libijs-0.35
  libjbig-dev libjbig0 libjbig2dec0 libjpeg-dev libjpeg62-turbo-dev libjson-glib-1.0-0 libjson-glib-1.0-common
  libkpathsea6 liblapack-dev liblapack3 liblcms2-2 liblzma-dev libncurses5-dev libnspr4 libnss3 libogg0 libopenjp2-7
  libpango-1.0-0 libpango1.0-dev libpangocairo-1.0-0 libpangoft2-1.0-0 libpangoxft-1.0-0 libpaper-utils libpaper1
  libpcre16-3 libpcre3-dev libpcre32-3 libpcrecpp0v5 libpixman-1-0 libpixman-1-dev libpoppler64 libpotrace0
  libproxy1v5 libptexenc1 libpthread-stubs0-dev libpulse0 libreadline-dev librest-0.7-0 librsvg2-2 librsvg2-common
  libsm-dev libsm6 libsndfile1 libsoup-gnome2.4-1 libsoup2.4-1 libsynctex1 libtcl8.6 libtexlua52 libtexluajit2
  libtext-unidecode-perl libthai-data libthai0 libtiff5 libtiff5-dev libtiffxx5 libtinfo-dev libtk8.6 libtool
  libvorbis0a libvorbisenc2 libx11-dev libx11-xcb1 libxau-dev libxaw7 libxcb-dri2-0 libxcb-dri3-0 libxcb-glx0
  libxcb-present0 libxcb-render0 libxcb-render0-dev libxcb-shape0 libxcb-shm0 libxcb-shm0-dev libxcb-sync1
  libxcb1-dev libxcomposite1 libxcursor1 libxdamage1 libxdmcp-dev libxext-dev libxfixes3 libxfont1 libxfont2
  libxft-dev libxft2 libxi6 libxinerama1 libxkbfile1 libxml-libxml-perl libxml-namespacesupport-perl
  libxml-sax-base-perl libxml-sax-perl libxmu6 libxpm4 libxrandr2 libxrender-dev libxrender1 libxshmfence1 libxss-dev
  libxss1 libxt-dev libxt6 libxtst6 libxv1 libxxf86dga1 libxxf86vm1 libzzip-0-13 m4 mpack openjdk-8-jdk
  openjdk-8-jdk-headless openjdk-8-jre openjdk-8-jre-headless po-debconf poppler-data preview-latex-style t1utils
  tcl8.6 tcl8.6-dev tex-common texinfo texlive-base texlive-binaries texlive-extra-utils texlive-fonts-extra
  texlive-fonts-recommended texlive-generic-recommended texlive-latex-base texlive-latex-extra
  texlive-latex-recommended texlive-pictures tk8.6 tk8.6-dev ttf-adf-accanthis ttf-adf-gillius ttf-adf-universalis
  x11-common x11-utils x11-xkb-utils x11proto-core-dev x11proto-input-dev x11proto-kb-dev x11proto-render-dev
  x11proto-scrnsaver-dev x11proto-xext-dev xdg-utils xfonts-base xfonts-encodings xfonts-utils xorg-sgml-doctools
  xserver-common xtrans-dev xvfb
0 upgraded, 276 newly installed, 0 to remove and 0 not upgraded.
Need to get 518 MB of archives.
After this operation, 1,578 MB of additional disk space will be used.
Do you want to continue? [Y/n] n
$ ./configure --with-x=no
$ time make
make[1]: Leaving directory '/home/pi/R-3.5.1'

real	213m9.985s
user	206m50.825s
sys	3m23.482s

Install all dependencies for building R

This is a comprehensive list. This list is even larger than r-base-dev.

[email protected]:/mnt/usb/R-2.15.2# apt-get build-dep r-base
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
The following NEW packages will be installed:
  bison ca-certificates ca-certificates-java debhelper defoma ed file fontconfig gettext
  gettext-base html2text intltool-debian java-common libaccess-bridge-java
  libaccess-bridge-java-jni libasound2 libasyncns0 libatk1.0-0 libaudit0 libavahi-client3
  libavahi-common-data libavahi-common3 libblas-dev libblas3gf libbz2-dev libcairo2
  libcairo2-dev libcroco3 libcups2 libdatrie1 libdbus-1-3 libexpat1-dev libflac8
  libfontconfig1-dev libfontenc1 libfreetype6-dev libgif4 libglib2.0-dev libgtk2.0-0
  libgtk2.0-common libice-dev libjpeg62-dev libkpathsea5 liblapack-dev liblapack3gf libnewt0.52
  libnspr4-0d libnss3-1d libogg0 libopenjpeg2 libpango1.0-0 libpango1.0-common libpango1.0-dev
  libpcre3-dev libpcrecpp0 libpixman-1-0 libpixman-1-dev libpng12-dev libpoppler5 libpulse0
  libreadline-dev libreadline6-dev libsm-dev libsndfile1 libthai-data libthai0 libtiff4-dev
  libtiffxx0c2 libunistring0 libvorbis0a libvorbisenc2 libxaw7 libxcb-render-util0
  libxcb-render-util0-dev libxcb-render0 libxcb-render0-dev libxcomposite1 libxcursor1
  libxdamage1 libxext-dev libxfixes3 libxfont1 libxft-dev libxi6 libxinerama1 libxkbfile1
  libxmu6 libxmuu1 libxpm4 libxrandr2 libxrender-dev libxss-dev libxt-dev libxtst6 luatex m4
  openjdk-6-jdk openjdk-6-jre openjdk-6-jre-headless openjdk-6-jre-lib openssl pkg-config
  po-debconf preview-latex-style shared-mime-info tcl8.5-dev tex-common texi2html texinfo
  texlive-base texlive-binaries texlive-common texlive-doc-base texlive-extra-utils
  texlive-fonts-recommended texlive-generic-recommended texlive-latex-base texlive-latex-extra
  texlive-latex-recommended texlive-pictures tk8.5-dev tzdata-java whiptail x11-xkb-utils
  x11proto-render-dev x11proto-scrnsaver-dev x11proto-xext-dev xauth xdg-utils xfonts-base
  xfonts-encodings xfonts-utils xkb-data xserver-common xvfb zlib1g-dev
0 upgraded, 136 newly installed, 1 to remove and 0 not upgraded.
Need to get 139 MB of archives.
After this operation, 410 MB of additional disk space will be used.
Do you want to continue [Y/n]?

Instruction of installing a development version of R under Ubuntu (works on Ubuntu 12.04)

Note that texi2dvi has to be installed first to avoid the following error. It is better to follow the Ubuntu instruction ( when we work on Ubuntu OS.

$ (cd doc/manual && make front-matter html-non-svn)
creating RESOURCES
/bin/bash: number-sections: command not found
make: [../../doc/RESOURCES] Error 127 (ignored)

To build R, run the following script. To run the built R, type 'bin/R'.

# Get recommended packages if necessary

R_PAPERSIZE=letter                              \
R_BATCHSAVE="--no-save --no-restore"            \
R_BROWSER=xdg-open                              \
PAGER=/usr/bin/pager                            \
PERL=/usr/bin/perl                              \
R_UNZIPCMD=/usr/bin/unzip                       \
R_ZIPCMD=/usr/bin/zip                           \
R_PRINTCMD=/usr/bin/lpr                         \
LIBnn=lib                                       \
AWK=/usr/bin/awk                                \
CC="ccache gcc"                                 \
CFLAGS="-ggdb -pipe -std=gnu99 -Wall -pedantic" \
CXX="ccache g++"                                \
CXXFLAGS="-ggdb -pipe -Wall -pedantic"          \
FC="ccache gfortran"                            \
F77="ccache gfortran"                           \
MAKE="make"                                     \
./configure                                     \
    --prefix=/usr/local/lib/R-devel             \
    --enable-R-shlib                            \
    --with-blas                                 \
    --with-lapack                               \

#CC="clang -O3"                                  \
#CXX="clang++ -03"                               \

# Workaround for explicit SVN check introduced by

# Need to build FAQ
(cd doc/manual && make front-matter html-non-svn)

rm -f non-tarball

# Get current SVN revsion from git log and save in SVN-REVISION
echo -n 'Revision: ' > SVN-REVISION
git log --format=%B -n 1 \
  | grep "^git-svn-id" \
  | sed -E 's/^git-svn-id: https:\/\/\/R\/.*[email protected]([0-9]+).*$/\1/' \
echo -n 'Last Changed Date: ' >>  SVN-REVISION
git log -1 --pretty=format:"%ad" --date=iso | cut -d' ' -f1 >> SVN-REVISION

# End workaround

# Set this to the number of cores on your computer
make --jobs=4

If we DO NOT use -depth option in git clone command, we can use git checkout SHA1 (40 characters) to get a certain version of code.

git checkout f1d91a0b34dbaa6ac807f3852742e3d646fbe95e  # plot(<dendrogram>): Bug 15215 fixed 5/2/2015
git checkout trunk                                     # switch back to trunk

The svn revision number for a certain git revision can be found in the blue box on the github website (git-svn-id). For example, this revision has an svn revision number 68302 even the current trunk is 68319.

Now suppose we have run 'git check trunk', create a devel'R successfully. If we want to build R for a certain svn or git revision, we run 'git checkout SHA1', 'make distclean', code to generate the SVN-REVISION file (it will update this number) and finally './configure' & 'make'.

time (./configure --with-recommended-packages=no && make --jobs=5)

The timing is 4m36s if I skip recommended packages and 7m37s if I don't skip. This is based on Xeon W3690 @ 3.47GHz.

The full bash script is available on Github Gist.

Install multiple versions of R on Ubuntu

  • Installing multiple versions of R on Linux especially on RStudio Server, Mar 13, 2018.
    • Some common locations are /usr/lib/R/bin, /usr/local/bin (create softlinks for the binaries here), /usr/bin.
    • When build R from source, specify prefix. In the following example, RStudio IDE can detect R.
$ ./configure --prefix=/opt/R/3.5.0 --enable-R-shlib
$ make
$ sudo make install
$ which R
$ tree -L 3 /opt/R/3.5.0/
├── bin
│   ├── R
│   └── Rscript
├── lib
│   ├── pkgconfig
│   │   └── libR.pc
│   └── R
│       ├── bin
│       ├── COPYING
│       ├── doc
│       ├── etc
│       ├── include
│       ├── lib
│       ├── library
│       ├── modules
│       ├── share
│       └── SVN-REVISION
└── share
    └── man
        └── man1

To install the devel version of R alongside the current version of R. See this post. For example you need a script that will build r-devel, but install it in a location different from the stable version of R (eg use --prefix=/usr/local/R-X.Y.Z in the config command). Note that the executable is installed in “/usr/local/lib/R-devel/bin”, but that can be changed to others like "/usr/local/bin".

Another fancy way is to use docker.

Minimal installation of R from source

Assume we have installed g++ (or build-essential) and gfortran (Ubuntu has only gcc pre-installed, but not g++),

sudo apt-get install build-essential gfortran

we can go ahead to build a minimal R.

tar -xzvf R-3.1.1.tar.gz; cd R-3.1.1
./configure --with-x=no --with-recommended-packages=no --with-readline=no

See ./configure --help. This still builds the essential packages like base, compiler, datasets, graphics, grDevices, grid, methods, parallel, splines, stats, stats4, tcltk, tools, and utils.

Note that at the end of 'make', it shows an error of 'cannot find any java interpreter. Please make sure java is on your PATH or set JAVA_HOME correspondingly'. Even with the error message, we can use R by typing bin/R.

To check whether we have Java installed, type 'java -version'.

$ java -version
java version "1.6.0_32"
OpenJDK Runtime Environment (IcedTea6 1.13.4) (6b32-1.13.4-4ubuntu0.12.04.2)
OpenJDK 64-Bit Server VM (build 23.25-b01, mixed mode)

Recommended packages

R can be installed without recommended packages. Keep it in mind. Some people have assumed that a `recommended' package can safely be used unconditionally, but this is not so.

Run R commands on bash terminal

# Install R
sudo apt-get update
sudo apt-get install gdebi libxml2-dev libssl-dev libcurl4-openssl-dev r-base r-base-dev

# install common packages
R --vanilla << EOF
install.packages(c("tidyverse","data.table","dtplyr","devtools","roxygen2"), repos = "")

# Export to HTML/Excel
R --vanilla << EOF
install.packages(c("htmlTable","openxlsx"), repos = "")
EOF# Blog tools
R --vanilla << EOF
install.packages(c("knitr","rmarkdown"), repos='')


  • R CMD build someDirectory - create a package
  • R CMD check somePackage_1.2-3.tar.gz - check a package
  • R CMD INSTALL somePackage_1.2-3.tar.gz - install a package from its source

bin/R (shell script) and bin/exec/R (binary executable) on Linux OS

bin/R is just a shell script to launch bin/exec/R program. So if we try to run the following program

# test.R
cat("-- reading arguments\n", sep = "");
cmd_args = commandArgs();
for (arg in cmd_args) cat("  ", arg, "\n", sep="");

from command line like

$ R --slave --no-save --no-restore --no-environ --silent --args arg1=abc < test.R
# OR using Rscript
-- reading arguments

we can see R actually call bin/exec/R program.

CentOS 6.x

Install build-essential (make, gcc, gdb, ...).

yum groupinstall "Development Tools"
yum install kernel-devel kernel-headers

Install readline and X11 (probably not necessary if we use ./configure --with-x=no)

yum install readline-devel 
yum install libX11 libX11-devel libXt libXt-devel

Install libpng (already there) and libpng-devel library. This is for web application purpose because png (and possibly svg) is a standard and preferred graphics format. If we want to output different graphics formats, we have to follow the guide in R-admin manual to install extra graphics libraries in Linux.

yum install libpng-devel
rpm -qa | grep "libpng"
# make sure both libpng and libpng-devel exist.

Install Java. One possibility is to download from Oracle. We want to download jdk-7u45-linux-x64.rpm and jre-7u45-linux-x64.rpm (assume 64-bit OS).

rpm -Uvh jdk-7u45-linux-x64.rpm
rpm -Uvh jre-7u45-linux-x64.rpm
# Check
java -version

Now we are ready to build R by using "./configure" and then "make" commands.

We can make R accessible from any directory by either run "make install" command or creating an R_HOME environment variable and export it to PATH environment variable, such as

export R_HOME="path to R"
export PATH=$PATH:$R_HOME/bin 

Install R on Mac

A binary version of R is available on Mac OS X.

Noted that personal R packages will be installed to ~/Library/R directory. More specifically, packages from R 3.3.x will be installed onto ~/Library/R/3.3/library.

For R 3.4.x, the R packages go to /Library/Frameworks/R.framework/Versions/3.4/Resources/library. The advantages of using this folder is 1. the folder is writable by anyone. 2. even the built-in packages can be upgraded by users.


macOS does not include gfortran. So we cannot compile package like quantreg which is required by the car package. Another example is robustbase package.

Development Tools and Libraries for R of R on Mac OS X.

For now, I am using gfortran 6.1 downloaded from on my OS X El Capitan (10.11).

data.table and enable OpenMP

See data.table

Install R on Chrome OS (crouton)

Tested on Lenovo Chromebook s330 (4-core, 4GB memory, 32GB storage)

  1. Install crouton. See here.
  2. Install binary version of R does not work (Xenial + xfce). The following packages have unmet dependencies: r-base : Depends: r-base-core (>=3.5.2-1xenial) but it is not going to be installed... E: Unable to correct problems, you have held broken packages.
  3. Install from source
sudo apt-get build-dep r-base
tar xzvf R-3.5.2.tar.gz
cd R-3.5.2
./configure --enable-R-shlib
make -j4
sudo make install

Upgrade R