如何在R中导出用matsplitter修改的矩阵

时间:2015-03-17 11:51:48

标签: r matrix output

我需要将一个矩阵从R导出到一个* .txt文件,该文件已经用matsplitter函数分割而不会丢失所创建的格式,即我需要将数据放在三行和五列的子集中。

matspliltter功能:

matsplitter<-function(M, r, c) {
rg <- (row(M)-1)%/%r+1
cg <- (col(M)-1)%/%c+1
rci <- (rg-1)*max(cg) + cg
N <- prod(dim(M))/r/c
cv <- unlist(lapply(1:N, function(x) M[rci==x]))
dim(cv)<-c(r,c,N)
cv}

示例矩阵,拆分和输出

B <- matrix(c(1:1380),ncol=5)

matsplitter(B,3,5)

write.table(B,file="outfile.txt",sep="\t", col.names = F, row.names = F)

write.table将松散拆分并创建一个只有三行的文件。如何在* .txt文件中保留matsplitter产生的输出外观?

以及完成后结果应该是什么样子的示例(“,1”等需要替换为字符串:

“tstep”0“item”1“layer”0

所以最终输出看起来像这样:

"tstep" 0 "item" 1 "layer" 0
1  277  553  829 1105
2  278  554  830 1106
3  279  555  831 1107

"tstep" 1 "item" 1 "layer" 0
4  280  556  832 1108
5  281  557  833 1109
6  282  558  834 1110

"tstep" 2 "item" 1 "layer" 0
7  283  559  835 1111
8  284  560  836 1112
9  285  561  837 1113

等。随着“tstep”随着每组新数据的增加而增加。

1 个答案:

答案 0 :(得分:1)

如果我理解你的正确目标是:

  • 制表符分隔列
  • 新行中的每一行
  • 每个组的额外新行

例如:

test <- matsplitter(B,3,5)

apply(test, 3, function(x){
  write.table(as.data.frame(x),file="outfile.txt",sep="\t", col.names = F, row.names = F, append = TRUE )
  cat("\n", file = "outfile.txt", append = TRUE, fill = F )
})