如何解决与 guix
我实际上正在评估不同的解决方案,以增强/探索在我的 R/Python 科学工作流程中的可再现性:具有可再现分析(绘图、分析)和纸张的数据。
如您所知,有两大 Linux 版本提供了一些解决方案:Nix 和 Guix
在 nix 中,通常描述的使用 R 开发的方式是,例如,使用 rWrapper
和 rPackages
:
pkgs.rWrapper.override{ packages = with pkgs.rPackages; [tidyverse rmarkdown]; };
我的问题(不是那么...)很简单,就像 Python 一样,众所周知,R 在可重复性方面是一场噩梦,即使在中期也是如此。为了好玩,您可以尝试使用最新版本的 R 运行 2 年以来的 ggplot2 代码...
为了为科学论文提出一个从相同数据产生相同结果的薄片,我有兴趣在推导中修复 R 的版本和用于计算分析或绘图的 R 包的版本。>
{
description = "Generate R result from simulation";
inputs = {
nixpkgs.url = "nixpkgs/nixos-20.09";
utils.url = "github:numtide/flake-utils";
};
outputs = {self,nixpkgs,utils,mach-nix } : (utils.lib.eachDefaultSystem
(system :
let
pkgs = nixpkgs.legacyPackages.${system};
REnv = pkgs.rWrapper.override{ packages = with pkgs.rPackages; [tidyverse rmarkdown]; };
buildrScripts = { stdenv,fetch,... }: stdenv.mkDerivation {
name = "myscript";
src = self;
nativeBuildInputs = [ REnv ];
dontBuild = true;
buildInputs = [ pkgs.pandoc pkgs.unzip ];
installPhase=''
mkdir $out
cd $out
${REnv}/bin/Rscript -e 'rmarkdown::render("test.Rmd")
'';
in {
defaultPackage = self.packages.${system}.buildrScripts;
}
));}
例如,我怎样才能更精确地定义我想要使用的,编译我的 test.Rmd
,只有 tidyverse 1.3.1 和 R 4.1.O ?即使在 5 年内?
我发现 Guix 显示了 R 和 tidyverse 的不同可用包/版本:
tidyverse.1.3.1 需要的版本已经清晰呈现:
使用 rPackages
中的 Nix
我寻找一种方法来实现类似的目标,即。一种将 R 或 R 包的版本显式引用到派生中的方法,但我没有找到。
有了 rPackages here nix 开发者已经提供了很好的基础,但也许我们需要更多......
我们如何才能使用 Nix 共同在 R 包上实现更好的可重复性?我对任何想法感兴趣?
也许我们可以直接从 cran 存档中获取包的源并编译它?例如 tidyverse :
- https://cran.r-project.org/web/packages/tidyverse/index.html,
- https://cran.r-project.org/src/contrib/Archive/tidyverse/ ?
Ps:我知道 Nix 和 Guix 都是 https://archive.softwareheritage.org/ 的合作伙伴,这是一种归档和调用 cran 包的好方法:
- https://guix.gnu.org/fr/blog/2019/connecting-reproducible-deployment-to-a-long-term-source-code-archive/
- https://www.tweag.io/blog/2020-06-18-software-heritage/
Ps : 答案也可以添加到 https://nixos.wiki/wiki/R
更新 1
在与 nix discord 上的一些优秀人士讨论后,我了解到 nix 不需要版本,因为 flake.nix + flake.lock
存储哈希(请参阅 nix flake 元数据)将我的构建和下载与 nixpkgs 上的非常具体的提交链接起来。
但这并不能解决:
- 这个包链接/需要的 tar.gz 源问题在这个非常具体的提交中由 RPackages 声明?我想软件遗产会在这一点上有所帮助吗?
- 某些 R 版本与 R 版本的软件包不兼容的常见问题。例如,您使用 R 3.0.0 和 tidyverse 1.2.3 编写代码,您更新了 R 版本,因为其他一些包需要更新并且仅适用于 R 3.2.0 可用的依赖项,但是 ahum,R 3.2.0 不存在 tidyverse 1.2.3 ...修复版本并访问旧的 tar.gz 解决了这个问题的一部分我想。
我们如何使用 nix 定义这样的东西?
更新 2
似乎有人构建了一个 unofficial index 来帮助人们使用 tidyverse 搜索旧版本的 Ex 包:https://lazamar.co.uk/nix-versions/?channel=nixpkgs-unstable&package=r-tidyverse
感谢@dram 提供有关此问题的链接和讨论。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。