Snakemake 不读取 R 中的完整文件?

Exe*_*ter 1 r bioinformatics cbind snakemake rna-seq

在执行量化(kallisto/salmon)后,我正在使用一些快速的 R 脚本来 cbind 文件。问题是,我收到一个 R 错误,说我的输入文件长度不同,所以 cbind() 不起作用。
这显然不是这种情况,它们都是 16887 行(用 bash wc 检查),并且在没有snakenmake 的 R 中工作得很好。

还值得一提的是,我确实得到了随机数样本(~ 1 到 4)的输出。

这是R代码:

sample <- read.table(snakemake@input[[1]], sep = "\t", header = TRUE)
if (!file.exists(snakemake@params[[1]])) {
  merge <- data.frame(sample)
} else {
  merge1 <- read.table(snakemake@params[[1]], sep = "\t", header = TRUE)
  merge <- cbind(merge1, sample[,2, drop=F])
}
write.table(merge, snakemake@params[[1]], sep = "\t", quote = F, row.names = F)
file.create(snakemake@output[[1]])
Run Code Online (Sandbox Code Playgroud)

而蛇形规则:

rule merge_quantif:
        input:
            QUANTIF+"/{sample}/quantif.txt"
        output:
            QUANTIF+"/{sample}/merge.done"
        params:
            QUANTIF+"/all_sample_quantified.txt"
        script:
            "Tools/merge_quantif.R"
Run Code Online (Sandbox Code Playgroud)

我的文件是这样的:

Gene    R1
A1BG    0.287571
A1CF    0
A2M 0.198756
A2ML1   0
A2MP1   0
A3GALT2 0
A4GALT  3.098108
Run Code Online (Sandbox Code Playgroud)

输出应该是这样的,但所有 17 个样本

Gene    R4  R8  R15 R13
A1BG    0.337515    0.284943    0.488654    0.587114
A1CF    0   0   0   0
A2M 0   0   0.105159    0.009539
Run Code Online (Sandbox Code Playgroud)

如果有人有解决这个问题的想法,将不胜感激。

------------ 编辑修改后的 R 代码以与 asnwer 一起使用:

Gene    R1
A1BG    0.287571
A1CF    0
A2M 0.198756
A2ML1   0
A2MP1   0
A3GALT2 0
A4GALT  3.098108
Run Code Online (Sandbox Code Playgroud)

dar*_*ber 5

我认为,问题在于规则merge_quantif是针对每个样本执行的,即可能并行执行 17 次。但是,每次运行都会merge_quantif写入同一个输出文件 ( QUANTIF+"/all_sample_quantified.txt"),因为在您的 R 脚本中,您有write.table(merge, snakemake@params[[1]], ...). 我怀疑这会导致问题,或者至少不是理想的设置。我怀疑你想要的是这样的:

rule merge_quantif:
        input:
            expand(QUANTIF+"/{sample}/quantif.txt", sample= list_of_samples)
        output:
            QUANTIF+"/all_sample_quantified.txt"
        script:
            "Tools/merge_quantif.R"
Run Code Online (Sandbox Code Playgroud)

whereTools/merge_quantif.R一一读取输入文件列表,合并,最后将合并后的文件写入QUANTIF+"/all_sample_quantified.txt"