R: Difference between revisions

From NixOS Wiki
imported>Idontgetoutmuch
No edit summary
imported>Dmvianna
direct users of Jupyter to use jupyterWith from tweag
Line 26: Line 26:
== Jupyter Notebook ==
== Jupyter Notebook ==


There is currently no package in nixpkgs to set up Jupyter Notebook with additional kernels. (Keep an eye on this [https://github.com/NixOS/nixpkgs/pull/33673 this pull request] though).
Use [https://github.com/tweag/jupyterWith jupyterWith]
 
For now, you can save the following into a file and run it with nix-shell:
<syntaxhighlight lang="nix>
with import <nixpkgs> {};
let
my-R-packages = with rPackages; [ ggplot2 dplyr xts ];
R-with-my-packages = rWrapper.override{ packages = with rPackages; my-R-packages ++ [ JuniperKernel ]; };
jupyter-R-kernel = stdenv.mkDerivation {
  name = "jupyter-R-kernel";
  buildInputs = [ pythonPackages.notebook R-with-my-packages ];
  unpackPhase = ":";
  installPhase = ''
    export HOME=$TMP
    ${R-with-my-packages}/bin/R --slave -e "JuniperKernel::installJuniper(prefix='$out')"
  '';
};
in
mkShell rec {
  name = "jupyter-with-R-kernel";
  buildInputs = [ jupyter-R-kernel pythonPackages.jupyter ];
  shellHook = ''
    export JUPYTER_PATH=${jupyter-R-kernel}/share/jupyter
    # see https://github.com/NixOS/nixpkgs/issues/38733
    ${R-with-my-packages}/bin/R --slave -e "system2('jupyter', 'notebook')"
  '';
}
</syntaxhighlight>
 
== How does <code>rWrapper</code> work? ==
 
<code>rWrapper</code> simply replaces the R command in your path by a script that sets the environment variable <code>R_LIBS_SITE</code> and then runs R. [https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/r-modules/wrapper.nix]
 
== With nix-shell ==
 
Below is an example of a nix-shell build to run R with knitr for R markdown:
 
'''shell.nix'''
<syntaxhighlight lang = "nix">
let
  pkgs = import <nixpkgs> {};
  stdenv = pkgs.stdenv;
in with pkgs; {
  myProject = stdenv.mkDerivation {
    name = "Speedracer";
    version = "1";
 
    buildInputs =  [
      R
      rPackages.knitr
      rPackages.rmarkdown
    ];
  };
}
</syntaxhighlight>


== R with Lorri ==
== R with Lorri ==

Revision as of 09:16, 13 August 2020

R comes with a very large number of packages, many of which available through nixpkgs. In particular, any package available through CRAN.

Similarly to Python, your packages must be declared when installing R. Commands such as install.packages("ggplot2") will not work.

To install R with a collection of packages, a new nix package must be defined, for instance

with pkgs;
let
  R-with-my-packages = rWrapper.override{ packages = with rPackages; [ ggplot2 dplyr xts ]; };
in ...

and then you can put R-with-my-packages into your environment.systemPackages for a system-wide installation, for instance.

If you with to use `nix-shell` to generate an on-the-fly environment with some R packages, the command is similar:

nix-shell --packages 'rWrapper.override{packages = [ rPackages.ggplot2 ];}'

RStudio

RStudio uses a standard set of packages and ignores any custom R environments, like the one set up above. To install it you can use rstudioWrapper just as we used rWrapper earlier.

RStudio-with-my-packages = rstudioWrapper.override{ packages = with rPackages; [ ggplot2 dplyr xts ]; };

Jupyter Notebook

Use jupyterWith

R with Lorri

An example of a shell.nix for usage with lorri is shown below:

let
  pkgs = import <nixpkgs> {};
in
  pkgs.mkShell {
    buildInputs = with pkgs; [
      R
      rPackages.rmarkdown
      rPackages.knitr
    ];
  }

A note on knitr

To knit a .Rmd file to a pdf (or .Rnw), you need to have included in your envronment pkgs.texlive.combined.scheme-fullas well as pandoc or it will fail to knit. None of the other texlive packages contain the proper "frame" package. Note there are likely other workarounds but this requires the least effort.

Other Editors

with vim - nvim-r


with emacs - emacs speaks statistics

External Documentation