2016-06-16 5 views
3

Я хотел бы экспортировать список объектов разного размера в один лист Excel. Другими словами, я хотел бы, чтобы одна матрица отображалась, а затем под ней следующая матрица. Вот простой пример использования XLConnect:R. Экспорт списка на один лист в 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) 

Сейчас MAT1 просто написано поверх MAT2.

ответ

5

Я не знаком с XLConnect, но вот метод, использующий пакет xlsx. Ключ состоит в том, чтобы отслеживать совокупное количество строк, занятых матрицами, которые уже были записаны на рабочий лист, чтобы вы не перезаписывали их.

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) 

Создать книгу и рабочий лист в этой книге:

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

Написать каждую матрицу, одна под другой, пропуская одну строку между ними. r - счетчик строк, который мы используем для определения стартовой строки для размещения каждой последующей матрицы.

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

Вот скриншот полученного листа Excel:

enter image description here

Смежные вопросы