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

如何在R中导出Matspliter修改的矩阵,r,matrix,output,R,Matrix,Output,我需要将一个矩阵从R导出到一个*.txt文件,该文件已使用Matspliter函数拆分,而不会丢失创建的格式,即,我需要数据包含在三行五列的子集中 Matsplitter功能: 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(la

我需要将一个矩阵从R导出到一个*.txt文件,该文件已使用Matspliter函数拆分,而不会丢失创建的格式,即,我需要数据包含在三行五列的子集中

Matsplitter功能:

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}

随着每一组新数据的增加,“tstep”也随之增加。

如果我理解正确,目标是:

  • 制表符分隔列
  • 每行换一行
  • 每组增加一行
例如:

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 )
})

test Try
?capture.output
capture.output(matspliter(B,3,5),file='outfile.txt')
如果您需要保留输出的外观,这确实会产生类似于我需要的东西,我仍然需要删除列名和行名。如果您显示几行您希望获得的预期输出,那会更好。您是否需要分隔数组元素的
,1
。这可能已经澄清了问题,我选择用任意数据构造一个示例。实际上,我不需要分隔数组的“.1”,但是在下一步(我想一次只问一个问题)中,我会用另一个字符串替换“.1”。您是否使用
write.table
尝试过发布的解决方案。它可能符合您的规格。另外,在使用
capture.output
创建
outfile.txt
后,您可以删除
列/行名称
,即
write.table(gsub('\\[.\\\\]','',readLines('outfile.txt')、file='outfile.txt',row.names=FALSE,quote=FALSE)
,如果您在linux上工作,这可以通过
awk
解决,上面的应用程序给了我一个错误“如果(d2==0L){:需要真/假时缺少值”@eze我认为
test@eze输入数组必须有3维(正如akrun所说:
test
这里是matsplitter的结果)
"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
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 )
})