2016-06-16 12 views
3

Ich möchte eine Liste von Objekten unterschiedlicher Größe in eine einzige Excel-Tabelle exportieren. Mit anderen Worten, ich möchte, dass eine Matrix erscheint und dann darunter die nächste Matrix. Hier ist ein einfaches Beispiel XLConnect mit:R. Exportieren einer Liste in ein einzelnes Blatt in Excel

mat1<-matrix(c(0,1,2,3),nrow=2,ncol=2) 

mat2<-matrix(c(0,1,2,3,4,5),nrow=2,ncol=3) 

list<-list(mat1,mat2) 

wb<-loadWorkbook("XLConnectExample1.xlsx",creat=TRUE) 
createSheet(wb,name="sheet") 
writeWorksheet(wb,list,sheet="sheet") 
saveWorkbook(wb) 

Gerade jetzt, mat1 wird einfach über die Oberseite des mat2 geschrieben.

Antwort

5

Ich bin nicht so vertraut mit XLConnect, aber hier ist eine Methode mit dem xlsx Paket. Der Schlüssel besteht darin, die kumulative Anzahl der Zeilen zu protokollieren, die von den Matrizen belegt sind, die bereits in das Arbeitsblatt geschrieben wurden, damit sie nicht überschrieben werden.

library(xlsx) 

# Fake data 
mat1<-matrix(c(0,1,2,3),nrow=2,ncol=2) 
mat2<-matrix(c(0,1,2,3,4,5),nrow=2,ncol=3) 
mat3 = matrix(1:8, nrow=4) 

mat.list<-list(mat1,mat2,mat3) 

Erstellen einer Arbeitsbuch und ein Arbeitsblatt innerhalb dieser Arbeitsbuch:

wb = createWorkbook() 
sheet = createSheet(wb, "data") 

jeder Matrix schreiben, eine unter der anderen, in einer Reihe zwischen übersprungen wird. r ist ein Zeilenzähler, den wir verwenden, um die Startreihe für das Platzieren jeder nachfolgenden Matrix zu bestimmen.

r = 1 
for (i in 1:length(mat.list)) { 

    addDataFrame(mat.list[[i]], sheet, col.names=FALSE, row.names=FALSE, startRow=r) 

    r = r + nrow(mat.list[[i]]) + 1 

} 

saveWorkbook(wb, "test.xlsx") 

Hier ist ein Screenshot der resultierenden Excel-Arbeitsblatt:

enter image description here