R: Difference between revisions
imported>Krey No edit summary |
imported>Krey No edit summary |
||
Line 53: | Line 53: | ||
== External Documentation == | == External Documentation == | ||
[https://nixos.org/nixpkgs/manual/#r-packages] | [https://nixos.org/nixpkgs/manual/#r-packages R user guide in nixpkgs manual] |
Revision as of 16:20, 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')"
'';
}