121 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			121 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								R packages
							 | 
						||
| 
								 | 
							
								==========
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## 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`
							 |