如何将非矩形矩阵读入R中

时间:2014-06-06 22:00:38

标签: r matrix read.table

我有一个基因ID的大矩阵,后跟一系列bootstrap值。

例如:

  

NM_001040105 1.80711736583 0.877742720548 1.0842704195 1.80711736583 0.505992862434 0.877742720548 1.37340919803 0.722846946334 1.0842704195 1.0842704195 2.52996431217 1.80711736583 1.0842704195 2.52996431217 1.80711736583 1.0842704195 1.37340919803 1.37340919803 1.0842704195 1.37340919803 0.877742720548 1.0842704195 2.52996431217 1.80711736583 1.80711736583 0.877742720548 0.877742720548 0.877742720548 1.80711736583 1.0842704195 0.722846946334 0.877742720548 0.722846946334 1.80711736583 0.877742720548 8.31273988284 1.37340919803 0.722846946334 1.0842704195 1.0842704195 1.0842704195 1.37340919803 2.52996431217 1.80711736583 1.37340919803 1.37340919803 8.31273988284 3.97565820484 1.80711736583 ...

问题在于并非每个基因都具有相同数量的bootstrap值,因此矩阵不是矩形,因此read.table()不会起作用。 readLines()也不一定有效,因为我需要将基因ID与它们各自的bootstrap值相关联。有没有办法把这样的表读成R?

谢谢, 马库斯

2 个答案:

答案 0 :(得分:0)

怎么样?
#sample data
test<-c("NM_001040105 1.80711736583 0.877742720548 1.0842704195",
"PR_00104145 0.722846946334", 
"QQ_001678941 1.37340919803 0.877742720548 1.0842704195 2.52996431217 1.80711736583 1.80711736583 0.877742720548")

这里我使用textConnection读取示例数据,但您也应该能够将文件名传递给readLines。我还在空格上立即分割数据

con<-textConnection(test)
nn<-strsplit(readLines(con), " ")
close(con)

现在我将其转换为列表并将值设为数字。我使用第一个元素作为名称,其余所有作为值。

Map(function(a,b)b, sapply(nn,"[",1), 
    lapply(nn,function(x) as.numeric(tail(x,-1))))

答案 1 :(得分:0)

合理的效果方式,假设testreadLines()的结果:

space <- regexpr(" ", test, fixed=TRUE)
id <- substring(test, 1L, space-1L)
setNames(strsplit(substring(test, space+1L), " ", fixed=TRUE), id)