Я использую некоторый быстрый R-скрипт для привязки файлов после выполнения количественной оценки (kallisto / salmon). Проблема в том, что я получаю ошибку R, в которой говорится, что мои входные файлы имеют разную длину, поэтому cbind () не будет работать.
Это, очевидно, не тот случай, все они имеют 16887 строк (проверено с помощью bash w c), и он отлично работает в 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]])
И правило змейки:
rule merge_quantif:
input:
QUANTIF+"/{sample}/quantif.txt"
output:
QUANTIF+"/{sample}/merge.done"
params:
QUANTIF+"/all_sample_quantified.txt"
script:
"Tools/merge_quantif.R"
Мои файлы такие:
Gene R1
A1BG 0.287571
A1CF 0
A2M 0.198756
A2ML1 0
A2MP1 0
A3GALT2 0
A4GALT 3.098108
И вывод должен быть таким , но со всеми 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
Если у кого-нибудь есть идея разобраться в этом, с радостью оценят.
------------ EDIT Modified Код R до go с ответом:
sample <- snakemake@input
merge <- read.table(sample[[1]], sep = "\t", header = T)
for (i in 2:length(sample)) {
x <- read.table(sample[[i]], sep = "\t", header = T)
merge <- merge(merge, x, by="Gene")
}
write.table(merge, snakemake@output[[1]], sep = "\t", quote = F, row.names = F)