r - 如何在snakemake中执行R
问题描述
我发现snakemake文档非常简洁。自从我被问过几次以来,我想发布这个问题和我自己的答案。
你如何在蛇形规则中执行或集成这个 R 脚本?
my-script.R
CUTOFF <- 25
dat <- read.table('input-table.txt')
out <- dat[dat$V1 > CUTOFF, ]
write.table(out, 'output-table.txt')
蛇文件:
rule one:
input:
txt= 'input-table.txt',
output:
out= 'output-table.txt',
params:
cutoff= 25,
# now what?
解决方案
@dariober 有一个彻底的答案。我想分享选项 1 的变体,我用来使 R 脚本的交互式开发/调试更容易一些。
模拟snakemake
对象
可以包括一个序言来创建一个模拟snakemake
对象,条件是脚本是否以交互方式运行。这模仿了被实例化的实际对象,使人们能够通过真实的输入逐步执行代码,但在 Snakemake 执行脚本时会被跳过。
脚本/我的脚本.R
#!/usr/bin/env Rscript
################################################################################
## Mock `snakemake` preamble
################################################################################
if (interactive()) {
library(methods)
Snakemake <- setClass(
"Snakemake",
slots=c(
input='list',
output='list',
params='list',
threads='numeric'
)
)
snakemake <- Snakemake(
input=list(txt="input-table.txt"),
output=list(out="output-table.txt"),
params=list(cutoff=25),
threads=1
)
}
################################################################################
CUTOFF <- snakemake@params$cutoff
dat <- read.table(snakemake@input$txt)
out <- dat[dat$V1 > CUTOFF, ]
write.table(out, snakemake@output$out)
对象详细信息
类上的全套槽Snakemake
可以在类的generate_preamble
代码中看到snakemake.script.Rscript
。由于这可能会发生变化,因此可以使用(来自安装了 Snakemake 的 Python)检查已安装版本中的代码:
from inspect import getsource
from snakemake.script import RScript
print(getsource(RScript.generate_preamble))
推荐阅读
- java - 无法解决:firebase-database-15.0.0(并将数据库保留在应用程序中)
- python - 导入过滤器 - TypeError: type() 不支持 MRO 条目解析
- excel - VBA 复制、过去、重命名、复制过去并贯穿每一列
- java - 在日期格式期间,SimpleDateFormat 错误地向前滚动年份
- python - Python 文件显示
- python - 添加工具栏按钮图标 matplotlib
- c - 如何将字符串值分配给C中的二维数组?
- python-3.x - 我需要使用 python3 中的类中的方法替换文件中的字符串
- linux - 如何在 shell 脚本中将 awk 的输出输出到数组中
- javascript - Three.js 使用 GLTF Loader 加载对象后访问它