我已经编写了一个通用脚本来平均'堆栈'基于细胞方式的矩阵我写出了平均文件,但是在矩阵/表格等转换过程中的某个时刻,丢弃了与行名称列标题对应的单元格。
有没有办法让R'尊重'这个单元格(左上角),以便在我写出文件时它会持续存在?我需要将它保存在下游的另一个脚本中。
我想过只是注射'这个单元格在写入时返回,但是感觉很乱,如果我希望将其推广,我必须在argparse中添加一个参数。到目前为止,我只能找到header = T/F
write.table
的{{1}}选项,但这似乎不会为左上方列提供额外的内容。
以下是代码:
# 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
答案 0 :(得分:1)
我怀疑你的问题出在read.table
步骤。尝试做
test_table_read <- read.table('one_of_your_tables',
header = TRUE,
row.names = 1,
check.names = FALSE,
sep = '\t')
并查看View(test_table_read)
。我认为此时行名称的标题已经消失。
需要考虑的一些事项:
您的行名称服务的目的是什么?它们是数字的,如果是这样,它们应该在数据中而不是行名吗?
使用data.frame
代替matrix
?
matrices <- lapply(split(mtcars, 1:4), as.matrix)