You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Nix创建含R包data.table的环境?解决变量未定义错误

解决Nix Flake中R包data.table的名称错误问题

问题场景

你尝试用以下Nix Flake配置创建包含RStudio、R、Shiny和data.table的虚拟环境:

{
  description = "virtual environment with Rstudio, R, Shiny";
  inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
  inputs.flake-utils.url = "github:numtide/flake-utils";

  outputs = { self, nixpkgs, flake-utils }:
    flake-utils.lib.eachDefaultSystem (system:
      let
        pkgs = nixpkgs.legacyPackages.${system};

        rWrapper=pkgs.rWrapper;
        rstudioWrapper=pkgs.rstudioWrapper;
        rstudioServerWrapper=pkgs.rstudioServerWrapper;
        Rpackages=with pkgs.rPackages;[
          shiny
          data.table
        ];

        RwithPackages=   rWrapper.override{ packages =  Rpackages;};
        RStudio-with-my-packages = rstudioWrapper.override{ packages = Rpackages; };

        myDevTools = [
          #qtbase #patch
          RwithPackages
          RStudio-with-my-packages
        ];
      in {
        devShells.default = pkgs.mkShell {
          buildInputs = myDevTools;
        };
      });
}

运行时触发错误:

error: undefined variable 'data'

原因是Nix不允许变量名包含点号,R包data.table在Nixpkgs中使用了替代命名。

解决方法

1. 查找R包的正确Nix名称

使用nix search命令在nixpkgs中搜索目标R包:

nix search nixpkgs rPackages.data

搜索结果中会列出所有以data开头的R包,其中data.table对应的Nix包名为dataTable(将点号替换为驼峰命名)。

2. 修改Flake配置

将配置中Rpackages列表里的data.table替换为dataTable,修改后的完整配置如下:

{
  description = "virtual environment with Rstudio, R, Shiny";
  inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
  inputs.flake-utils.url = "github:numtide/flake-utils";

  outputs = { self, nixpkgs, flake-utils }:
    flake-utils.lib.eachDefaultSystem (system:
      let
        pkgs = nixpkgs.legacyPackages.${system};

        rWrapper=pkgs.rWrapper;
        rstudioWrapper=pkgs.rstudioWrapper;
        rstudioServerWrapper=pkgs.rstudioServerWrapper;
        Rpackages=with pkgs.rPackages;[
          shiny
          dataTable
        ];

        RwithPackages= rWrapper.override{ packages = Rpackages;};
        RStudio-with-my-packages = rstudioWrapper.override{ packages = Rpackages; };

        myDevTools = [
          #qtbase #patch
          RwithPackages
          RStudio-with-my-packages
        ];
      in {
        devShells.default = pkgs.mkShell {
          buildInputs = myDevTools;
        };
      });
}

现在重新运行nix develop即可正常创建包含所需R包的虚拟环境。

内容的提问来源于stack exchange,提问作者Pierre-olivier Gendraud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 19:52:50