Я написал скрипт общего назначения для усреднения «стеков» матриц по ячейкам. Я записываю усредненный файл, но ячейка, которая соответствует заголовку столбца для имен строк, в какой-то момент отбрасывается в процессе преобразования между матрицами / таблицами и т. Д.
Есть ли способ заставить R «уважать» эту ячейку (вверху слева), чтобы она сохранялась, когда я приду записать файл? Мне нужно сохранить его для другого сценария ниже.
Я думал о том, чтобы просто «вставить» ячейку обратно во время записи, но это кажется грязным, и если я хочу, чтобы это было обобщено, мне пришлось бы добавить аргумент в argparse. До сих пор я только смог определить параметр header = T/F
, равный write.table
, но, похоже, он не предлагает ничего дополнительного для верхнего левого столбца.
Вот код:
# Standard install if missing
list.of.packages <- c("argparse", "abind")
new.packages <- list.of.packages[!(list.of.packages %in% installed.packages()[,"Package"])]
if(length(new.packages)) install.packages(new.packages)
for(i in list.of.packages){suppressMessages(library(i, character.only = TRUE))}
# Parse commandline arguments
parser <- ArgumentParser()
parser$add_argument('-i',
'--infiles',
nargs='+',
required=TRUE,
help="All the matrices to average.")
parser$add_argument('-s',
'--separator',
action='store',
default='\t',
help='The field separator for the input matrices (they should all match). [Def = \t].')
parser$add_argument('-o',
'--outfile',
action='store',
required=TRUE,
help='Output file to store the averaged matrix in.')
args <-parser$parse_args()
tables <- lapply(args$infiles, read.table, header=TRUE, row.names=1, check.names=FALSE, sep=args$sep)
matrices <- lapply(tables, as.matrix)
stack <- abind(matrices, along=3)
stack_avg <- apply(stack, c(1,2), mean)
# Write file
write.table(stack_avg, args$outfile, sep=args$sep, col.names = NA, quote = FALSE)
cat("File written to: ", "\n", args$outfile, "\n")
С учетом заголовков:
Helix1 Helix2 Strand1 Strand2 Turn Unordered
20 8 8.25 18.25 9.5 13.75 36.25
....
Но желаемым выходом является (пока игнорируем значения):
Temp Helix1 Helix2 Strand1 Strand2 Turn Unordered
20 2.00 4.00 21.00 11.00 19.00 43.00
Пример входной матрицы может выглядеть следующим образом:
Temp Helix1 Helix2 Strand1 Strand2 Turn Unordered
20 2.00 12.00 19.00 11.00 11.00 23.00
25 1.00 5.00 21.00 10.00 18.00 46.00
30 1.00 4.00 21.00 10.00 17.00 45.00
35 1.00 5.00 24.00 11.00 18.00 40.00
40 1.00 5.00 21.00 100.00 19.00 43.00
45 1.00 3.00 25.00 11.00 18.00 42.00
50 1.00 4.00 23.00 11.00 19.00 41.00
55 1.00 4.00 19.00 10.00 19.00 46.00
60 1.00 5.00 18.00 11.00 22.00 42.00
65 1.00 5.00 200.00 11.00 22.00 41.00
70 2.00 4.00 20.00 11.00 20.00 43.00
75 2.00 5.00 15.00 10.00 23.00 44.00
80 2.00 5.00 16.00 10.00 22.00 45.00
85 1.00 4.00 19.00 11.00 21.00 44.00
90 2.00 4.00 20.00 11.00 20.00 44.00