如何为5777阶方阵添加行列名?现有代码无报错但失效
问题描述
我有一个5777×5777的方阵,数据预览如下:
head(data) 1.3 4.5 6 7 8.9 0 7.6 4.5 6.7 8 9 0.1 8 7.2 4.5 6 7 8.9 0.1 8 8.3 6.7 8 9 0.1 7.9 6.0 5 2.4 6.7 8 3 0.1 8 7.4 8 9 0.1 7.9 6.0 5 5.6
想要为该矩阵添加行列名,这些名称存储在一个包含5777行的文本文件中,文件预览如下:
head(file.txt) A1 B2 C3 D4 E5 F6 G7
期望添加后的矩阵格式如下:
A1 B2 C3 D4 E5 F6 G7 B2 1.3 4.5 6 7 8.9 0 7.6 C3 4.5 6.7 8 9 0.1 8 7.2 D4 4.5 6 7 8.9 0.1 8 8.3 E5 6.7 8 9 0.1 7.9 6.0 5 F6 2.4 6.7 8 3 0.1 8 7.4 G7 8 9 0.1 7.9 6.0 5 5.6
尝试了以下代码,无报错但输出未添加任何行列名:
#read in row names and column names header <- read.table("file.txt") #read in matrix data <- read.table("armlympho_matrix.ld") #set the row names and column names in matrix rownames(data) <- header[[1]] colnames(data) <- header[[1]] write.table(data, '/data/genome/h8/matrix_withheader.ld', row.names=FALSE, quote=FALSE)
问题原因
write.table中设置了row.names=FALSE,直接屏蔽了行名的输出- 读取
file.txt时,开头的空行会被读入为无效值,干扰行列名的正常绑定 - 默认列名输出格式和期望的结构不匹配
修正方案
方案1:完全匹配期望格式
手动拼接输出内容,确保第一行无额外空格:
# 读取行列名,过滤空行 header <- readLines("file.txt") header <- header[nchar(header) > 0] # 读取矩阵数据 data <- read.table("armlympho_matrix.ld") # 绑定行列名 rownames(data) <- header colnames(data) <- header # 构建输出内容:先写列名行,再写每行的行名+数据 output_content <- c( paste(colnames(data), collapse = " "), apply(cbind(rownames(data), data), 1, paste, collapse = " ") ) # 写入文件 writeLines(output_content, "/data/genome/h8/matrix_withheader.ld")
方案2:使用write.table快速输出(第一行开头含空格)
如果可以接受第一行开头有一个空格,用以下代码更简洁:
# 读取行列名,跳过开头空行 header <- read.table("file.txt", stringsAsFactors = FALSE, skip = 1)[[1]] # 读取矩阵 data <- read.table("armlympho_matrix.ld") # 设置行列名 rownames(data) <- header colnames(data) <- header # 输出:row.names=TRUE保留行名,col.names=NA让列名对应行名位置留空 write.table(data, "/data/genome/h8/matrix_withheader.ld", row.names = TRUE, col.names = NA, quote = FALSE, sep = " ")
内容的提问来源于stack exchange,提问作者HKJ3
相关产品推荐
相关产品推荐

