R: Difference between revisions

From NixOS Wiki
imported>Krey
No edit summary
imported>Krey
No edit summary
Line 14: Line 14:
In practice, R is commonly written inside editors like RStudio or inside a Jupyter Notebook.
In practice, R is commonly written inside editors like RStudio or inside a Jupyter Notebook.


=== RStudio ===
== 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 <code>rstudioWrapper</code> just as we used <code>rWrapper</code> earlier.
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 <code>rstudioWrapper</code> just as we used <code>rWrapper</code> earlier.
<syntaxhighlight lang="nix>
<syntaxhighlight lang="nix>
Line 20: Line 20:
</syntaxhighlight>
</syntaxhighlight>


=== 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).
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).
Line 50: Line 50:
}
}
</syntaxhighlight>
</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]


== External Documentation ==
== External Documentation ==


* [https://nixos.org/nixpkgs/manual/#r-packages R user guide in nixpkgs manual]
* [https://nixos.org/nixpkgs/manual/#r-packages R user guide in nixpkgs manual]

Revision as of 17:07, 13 April 2018

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.

In practice, R is commonly written inside editors like RStudio or inside a Jupyter Notebook.

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

There is currently no package in nixpkgs to set up Jupyter Notebook with additional kernels. (Keep an eye on this this pull request though).

For now, you can save the following into a file and run it with nix-shell:

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 ];
  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')"
  '';
}

How does rWrapper work?

rWrapper simply replaces the R command in your path by a script that sets the environment variable R_LIBS_SITE and then runs R. [1]

External Documentation