到目前为止,我每行只有5个,但很快我就会超过20个,所以我需要找到一个更好的方法来做到这一点。我在考虑for
循环,但我不知道如何迭代名称上的数字(mt1,mt2等)。
mt1<- do.call(cbind, dataoutput[[1]])
mt2<- do.call(cbind, dataoutput[[2]])
mt3<- do.call(cbind, dataoutput[[3]])
mt4<- do.call(cbind, dataoutput[[4]])
mt5<- do.call(cbind, dataoutput[[5]])
rownames(mt1)[1:No.file]<-paste("file", 1:No.file, sep=" ")
rownames(mt2)[1:No.file]<-paste("file", 1:No.file, sep=" ")
rownames(mt3)[1:No.file]<-paste("file", 1:No.file, sep=" ")
rownames(mt4)[1:No.file]<-paste("file", 1:No.file, sep=" ")
rownames(mt5)[1:No.file]<-paste("file", 1:No.file, sep=" ")
library(reshape)
mt11<-melt(mt1, id.vars="Legend")
mt21<-melt(mt2, id.vars="Legend")
mt31<-melt(mt3, id.vars="Legend")
mt41<-melt(mt4, id.vars="Legend")
mt51<-melt(mt5, id.vars="Legend")
答案 0 :(得分:4)
您可以使用lapply
,例如:
lapply(1:5,function(i){
mt <- do.call(cbind, dataoutput[[i]])
rownames(mt)[1:No.file]<- paste("file", 1:No.file, sep=" ")
mt.melt <-melt(mt, id.vars="Legend")
})
这里有一个data.frame
的列表,它比单独的变量要好得多。
请注意,paste("file", 1:No.file, sep=" ")
对于所有data.frame都是相同的。
编辑
在这种情况下,最好循环,这将处理dataoutput长度== 0时的情况,并避免像subscript out of bounds
lapply(dataoutput,function(do){
mt <- do.call(cbind, do)
rownames(mt)[1:No.file]<- paste("file", 1:No.file, sep=" ")
mt.melt <-melt(mt, id.vars="Legend")
})