R. Экспорт списка на один лист в Excel

Я хочу экспортировать список объектов разного размера на один лист Excel. Другими словами, я бы хотел, чтобы отображалась одна матрица, а под ней следующая матрица. Вот простой пример использования XLConnect:

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)

Сейчас мат1 просто записывается поверх мат2.


person burchw78    schedule 16.06.2016    source источник


Ответы (1)


Я не очень хорошо знаком с 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:

введите здесь описание изображения

person eipi10    schedule 16.06.2016