imported>Reblackwell
Officer package does not work unless installed with install.packages()
Add an "Install an R package from source" section.
 
(8 intermediate revisions by 7 users not shown)
Line 23: Line 23:
RStudio-with-my-packages = rstudioWrapper.override{ packages = with rPackages; [ ggplot2 dplyr xts ]; };
RStudio-with-my-packages = rstudioWrapper.override{ packages = with rPackages; [ ggplot2 dplyr xts ]; };
</syntaxhighlight>
</syntaxhighlight>
== Positron ==
Currently, the easiest way to use positron with nix is with mkShell:<syntaxhighlight lang="nix">
let
  pkgs = import <nixpkgs> { };
in
pkgs.mkShell {
  packages = [
    # Positron
    pkgs.positron-bin
    # R & packages.
    pkgs.R
    pkgs.rPackages.httr
    pkgs.rPackages.ggplot2
    # Python, ipykernel & packages.
    # pkgs.python313
    # pkgs.python313Packages.ipykernel # NOTE: Required for python.
    # pkgs.python313Packages.pandas
    # pkgs.python313Packages.requests
  ];
}
</syntaxhighlight>Other utilities like rWrapper are not compatible.


== Jupyter Notebook ==
== Jupyter Notebook ==
Line 59: Line 83:


== R with Lorri ==
== R with Lorri ==
An example of a '''shell.nix''' for usage with [https://github.com/target/lorri lorri] is shown below:
An example of a '''shell.nix''' for usage with [https://github.com/nix-community/lorri lorri] is shown below:


<syntaxhighlight lang = "nix">
<syntaxhighlight lang = "nix">
Line 73: Line 97:
   }
   }


</syntaxhighlight>
== R with Flakes and nix-direnv==
R and accompanying R-packages can be installed using a [[Flakes | Flake]] and then managed/activated with [https://github.com/nix-community/nix-direnv nix-direnv] to create a reproducible development environment. After the initial setup of nix-direnv (instructions provided on the GitHub README), there is a [https://github.com/nix-community/nix-direnv/blob/master/templates/flake/flake.nix flake template] provided by the nix-direnv maintainers to get started. Run <code>nix flake new -t github:nix-community/nix-direnv .</code> to initialize the flake template in your current directory. This will create a `flake.nix` file that can be edited to setup the R-environment:
<syntaxhighlight lang = "nix" >
{
  description = "A basic flake with a shell";
  inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
  inputs.flake-utils.url = "github:numtide/flake-utils";
  outputs = { self, nixpkgs, flake-utils }:
    flake-utils.lib.eachDefaultSystem (system: let
      pkgs = nixpkgs.legacyPackages.${system};
    in {
      devShells.default = pkgs.mkShell {
        nativeBuildInputs = [ pkgs.bashInteractive ];
        buildInputs = with pkgs; [ R rPackages.pagedown chromium pandoc ];
      };
    });
}
</syntaxhighlight>
Saving the file and then running <code>direnv allow</code> in the terminal of the project directory will execute the `flake.lock` and build the shell. This will install the current version of R and the R-package {pagedown} that is in <nixpkgs>. Note additional system dependencies may need installed for certain packages to work such as pandoc for document conversion with {rmarkdown}. Here, chromium is installed in the `buildInputs` so the <code>chrome_print</code> function can be used from {pagedown}. 
[https://github.com/wbolster/emacs-direnv Emacs has support for direnv] which can be setup to use R with ESS. Direnv functionality can also be set in Doom Emacs under :tools in the `init.el` file in `.doom.d` folder.
==Install an R-package from GitHub==
The R-packages available in <nixpkgs> are generated from a recent snapshot of CRAN. You may find certain packages a version behind or want to install a package not on CRAN/Bioconducter. R-packages can be installed from GitHub using `buildRPackage` and `fetchFromGitHub`. An example of installing {rmarkdown} from GitHub using a Flake:
<syntaxhighlight lang = "nix" >
{
  description = "A basic flake with a shell";
  inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
  inputs.flake-utils.url = "github:numtide/flake-utils";
  outputs = { self, nixpkgs, flake-utils }:
    flake-utils.lib.eachDefaultSystem (system: let
      pkgs = nixpkgs.legacyPackages.${system};
      rmark = pkgs.rPackages.buildRPackage {
        name = "rmarkdown";
        src = pkgs.fetchFromGitHub{
          owner = "rstudio";
          repo = "rmarkdown";
          rev = "b87ca50c8c4d5a5876333b598aed4eb84de925a3";
          sha256 = "12mhmmibizbxgmsns80c8h97rr7rclv9hz98zpgsl26hw3s4l0vm";
        };
  propagatedBuildInputs = with pkgs.rPackages; [bslib evaluate jsonlite knitr stringr tinytex yaml xfun];
      };
    in {
      devShells.default = pkgs.mkShell {
        nativeBuildInputs = [ pkgs.bashInteractive ];
        buildInputs = with pkgs; [ R rmark pandoc ];
      };
    });
}
</syntaxhighlight>
You will need to obtain the `rev` and `sha256` for the package on github [https://search.nixos.org/packages?show=nix-prefetch-git&type=packages&query=nix-prefetch-git which can be found by using the `nix-prefetch-git` command line tool.] For the above example, running <code>nix-prefetch-git https://github.com/rstudio/rmarkdown</code> from a terminal will generate the information. You may need to manually specify other R-package/system dependencies for the specific package in the `propagatedBuildInputs`. This information can be found in the `DESCRIPTION` file of the R-package source directory.
== Install an R package from source ==
If you need a specific version of a package or find one that is not available in Nixpkgs, you can use `rPackages.buildRPackage` to build from source. The example below builds S4Arrays from BioConductor.<syntaxhighlight lang="nix">
let
  pkgs = import <nixpkgs> { };
  customPackage = pkgs.rPackages.buildRPackage {
    name = "S4Arrays";
    src = pkgs.fetchurl {
      url = "https://www.bioconductor.org/packages/release/bioc/src/contrib/S4Arrays_1.8.1.tar.gz";
      hash = "sha256-8f2oA0xgwI6CucXbMU1yJC4W6tiVMcDAk8D3Ur3zxw8=";
    };
    buildInputs = with pkgs.rPackages; [
      pkgs.R
      Matrix
      abind
      BiocGenerics
      S4Vectors
      IRanges
      crayon
    ];
  };
in
pkgs.mkShell {
  packages = with pkgs.rPackages; [
    pkgs.R
    Matrix
    abind
    BiocGenerics
    S4Vectors
    IRanges
    crayon
    customPackage # the package we built from source.
  ];
}
</syntaxhighlight>
</syntaxhighlight>


Line 81: Line 201:
== Other Editors ==
== Other Editors ==


'''with vim''' -  [https://nixos.wiki/wiki/Nvim-r nvim-r]
'''with vim''' -  [[Nvim-r | nvim-r]]




Line 88: Line 208:
== External Documentation ==
== External Documentation ==


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


== Officer package ==
== Officer package ==
Line 105: Line 225:
However officer does work if installed using the conventional install.packages() which can be enabled as discussed in
However officer does work if installed using the conventional install.packages() which can be enabled as discussed in
https://churchman.nl/tag/r/
https://churchman.nl/tag/r/
[[Category:Languages]]