R Markdown:无法访问通过Conda/Anaconda安装的Bash命令



我正在探索一些生物信息学数据,我喜欢尽可能使用R笔记本(即Rmarkdown(。现在,我需要使用命令行工具来分析 VCF 文件,我想通过 Rmarkdown 笔记本中的 Bash 代码块来完成。

问题是我要使用的命令已与conda一起安装到我的 conda 环境中。该工具bcftools.当我尝试访问此命令时,出现此错误(代码块已注释掉以显示 rmarkdown 代码块格式(:

#```{bash}
bcftools view -H test.vcf.gz
#```
/var/folders/9l/phf62p1s0cxgnzp4hgl7hy8h0000gn/T/RtmplzEvEh/chunk-code-6869322acde0.txt: line 3: bcftools: command not found

而如果我从终端运行,我会得到输出(使用名为"binfo"的 conda 环境(:

> bcftools view -H test.vcf.gz | head -n 3
chr10   78484538    .   A   C   .   PASS    DP=57;SOMATIC;SS=2;SSC=16;GPV=1;SPV=0.024109    GT:GQ:DP:RD:AD:FREQ:DP4 0/0:.:34:33:0:0%:0,33,0,0   0/1:.:23:19:4:17.39%:1,18,0,4
chr12   4333138 .   G   T   .   PASS    DP=119;SOMATIC;SS=2;SSC=14;GPV=1;SPV=0.034921   GT:GQ:DP:RD:AD:FREQ:DP4 0/0:.:72:71:1:1.39%:71,0,1,0    0/1:.:47:42:5:10.64%:42,0,5,0
chr15   75086860    .   C   T   .   PASS    DP=28;SOMATIC;SS=2;SSC=18;GPV=1;SPV=0.013095    GT:GQ:DP:RD:AD:FREQ:DP4 0/0:.:15:15:0:0%:4,11,0,0   0/1:.:13:8:5:38.46%:5,3,1,4
(binfo)

那么,如何从 R notebook/Rmarkdown bash 代码块访问与 conda/in my conda env 一起安装的工具?我搜索了很长一段时间,找不到任何人谈论在 Rmarkdown 的 shell 块中运行conda命令。任何帮助将不胜感激,因为我喜欢用于探索性分析的 R 笔记本格式。

将参数传递给引擎

如果您的 Conda 已正确配置为在 bash 中工作,那么您可以使用engine.opts告诉 bash 以登录模式启动(即,获取您的.bash_profile(Mac( 或.bashrc(Linux((:

砰砰��

```{bash engine.opts='-l'}
bcftools view -H test.vcf.gz
```

中兴

Image caption 如果与zsh(例如Mac OS 10.15 Catalina用户(合作,那么交互式标志--interactive|-i就是你想要的(Credit:@Leo(。

```{zsh engine.opts='-i'}
bcftools view -H test.vcf.gz
```

同样,这假设您之前运行过conda init zsh来设置 Conda 以使用 shell。

关于再现性的说明

由于可重复性通常是科学工作中的一个问题,因此我要补充一点,您可能想做一些事情来捕获Conda环境的状态。例如,如果您正在使用版本控制,则提交conda env export > environment.yaml。另一种选择是直接在 Rmd 的末尾输出该信息,就像通常使用sessionInfo()一样。 那是

```{bash engine.opts='-l', comment=NA}
conda env export
```

其中comment=NA,以便可以从渲染版本中干净地复制输出。

bash的快速解决方案:将以下初始化脚本附加到您的 Bash 脚本中。

eval "$(command conda 'shell.bash' 'hook' 2> /dev/null)"
# you may need to activate the "base" environment explicitly
conda activate base

细节

当您打开终端时,会生成一个交互式 shell。但是您的脚本是在非交互式 shell 中运行的。Bash 配置文件~/.bashrc不会用于脚本,这会跳过conda初始化,并且您的"基本"环境不会暴露在PATH中。

引用

  • Python - 通过 shell 脚本激活 conda env

最新更新