b8344f9e5c
I used the existing anchors generated by Docbook, so the anchor part should be a no-op. This could be useful depending on the infrastructure we choose to use, and it is better to be explicit than rely on Docbook's id generating algorithms. I got rid of the metadata segments of the Markdown files, because they are outdated, inaccurate, and could make people less willing to change them without speaking with the author.
119 lines
2.9 KiB
Markdown
119 lines
2.9 KiB
Markdown
# R {#r}
|
|
|
|
## Installation
|
|
|
|
Define an environment for R that contains all the libraries that you'd like to
|
|
use by adding the following snippet to your $HOME/.config/nixpkgs/config.nix file:
|
|
|
|
```nix
|
|
{
|
|
packageOverrides = super: let self = super.pkgs; in
|
|
{
|
|
|
|
rEnv = super.rWrapper.override {
|
|
packages = with self.rPackages; [
|
|
devtools
|
|
ggplot2
|
|
reshape2
|
|
yaml
|
|
optparse
|
|
];
|
|
};
|
|
};
|
|
}
|
|
```
|
|
|
|
Then you can use `nix-env -f "<nixpkgs>" -iA rEnv` to install it into your user
|
|
profile. The set of available libraries can be discovered by running the
|
|
command `nix-env -f "<nixpkgs>" -qaP -A rPackages`. The first column from that
|
|
output is the name that has to be passed to rWrapper in the code snipped above.
|
|
|
|
However, if you'd like to add a file to your project source to make the
|
|
environment available for other contributors, you can create a `default.nix`
|
|
file like so:
|
|
```nix
|
|
let
|
|
pkgs = import <nixpkgs> {};
|
|
stdenv = pkgs.stdenv;
|
|
in with pkgs; {
|
|
myProject = stdenv.mkDerivation {
|
|
name = "myProject";
|
|
version = "1";
|
|
src = if pkgs.lib.inNixShell then null else nix;
|
|
|
|
buildInputs = with rPackages; [
|
|
R
|
|
ggplot2
|
|
knitr
|
|
];
|
|
};
|
|
}
|
|
```
|
|
and then run `nix-shell .` to be dropped into a shell with those packages
|
|
available.
|
|
|
|
## RStudio
|
|
|
|
RStudio uses a standard set of packages and ignores any custom R
|
|
environments or installed packages you may have. To create a custom
|
|
environment, see `rstudioWrapper`, which functions similarly to
|
|
`rWrapper`:
|
|
|
|
```nix
|
|
{
|
|
packageOverrides = super: let self = super.pkgs; in
|
|
{
|
|
|
|
rstudioEnv = super.rstudioWrapper.override {
|
|
packages = with self.rPackages; [
|
|
dplyr
|
|
ggplot2
|
|
reshape2
|
|
];
|
|
};
|
|
};
|
|
}
|
|
```
|
|
|
|
Then like above, `nix-env -f "<nixpkgs>" -iA rstudioEnv` will install
|
|
this into your user profile.
|
|
|
|
Alternatively, you can create a self-contained `shell.nix` without the need to
|
|
modify any configuration files:
|
|
|
|
```nix
|
|
{ pkgs ? import <nixpkgs> {}
|
|
}:
|
|
|
|
pkgs.rstudioWrapper.override {
|
|
packages = with pkgs.rPackages; [ dplyr ggplot2 reshape2 ];
|
|
}
|
|
|
|
```
|
|
|
|
Executing `nix-shell` will then drop you into an environment equivalent to the
|
|
one above. If you need additional packages just add them to the list and
|
|
re-enter the shell.
|
|
|
|
## Updating the package set
|
|
|
|
```bash
|
|
nix-shell generate-shell.nix
|
|
|
|
Rscript generate-r-packages.R cran > cran-packages.nix.new
|
|
mv cran-packages.nix.new cran-packages.nix
|
|
|
|
Rscript generate-r-packages.R bioc > bioc-packages.nix.new
|
|
mv bioc-packages.nix.new bioc-packages.nix
|
|
```
|
|
|
|
`generate-r-packages.R <repo>` reads `<repo>-packages.nix`, therefor the renaming.
|
|
|
|
|
|
## Testing if the Nix-expression could be evaluated
|
|
|
|
```bash
|
|
nix-build test-evaluation.nix --dry-run
|
|
```
|
|
|
|
If this exits fine, the expression is ok. If not, you have to edit `default.nix`
|