我面临以下问题:
我在 Snakemake 中有一条规则,看起来像这样:
rule somerule:
input:
tables = expand("results/{tables}_table.txt", tables = ["1", "2"]),
output:
edit= expand("results/{tables}_edited.txt", tables = ["1", "2"]),
conda:
"../envs/r.yaml"
script:
"../scripts/script.R"
本规则使用的脚本如下:
library()
tab <- read.table(snakemake@input[["tables"]], sep = "\t", header = TRUE)
edit <- some_function(tab)
write.table(edit, file = snakemake@output[["edit"]], sep = "\t", quote = FALSE, row.names = TRUE, col.names = TRUE)
当我执行代码时,出现此错误:
Error in file(file, 'rt'): invalid 'description' argument
Called from: read.table -> file
Execution halted
但是,当我单独输入数据(而不是通配符)时,脚本可以正常工作并生成正确的输出文件。 问题可能出在哪里? 我怀疑 Snakemake 将所有输入数据同时传递到 R 脚本,而不是单独运行它们,但我不确定情况是否如此,更不确定如何修复它。
另一个网站上的一个好人回复了我。我会在这里留下他的回复,也许对某人有用。
”您的问题是 Snakemake 将所有输入数据同时传递到 R 脚本,而不是单独运行它们:)
如所写,您的规则采用输入文件列表并给出输出文件列表(expand 只是一个格式化辅助函数,它根据其参数返回一个列表)。相反,可能有一个规则使用一个输入和一个输出调用 R 脚本,而另一个规则则要求所有这些输出作为一次运行整个过程的简单方法。
也许是这样的?我在这里将表格改为表格只是为了强调它是一张一张的。
rule all:
input: expand("results/{table}_edited.txt", table = ["1", "2"])
rule somerule:
input:
table = "results/{table}_table.txt"
output:
edit = "results/{table}_edited.txt"
conda: "../envs/r.yaml"
script: "../scripts/script.R"
`
”