Записать список именованных фреймов данных в файл xlsx

#r #io #xls #xlsx #rjava

#r #io #xls #xlsx #rjava

Вопрос:

Я пытаюсь использовать пакет xlsx для сохранения списка именованных фреймов данных в файл xlsx. Все фреймы данных в списке имеют имена, но было бы неплохо, если бы это работало и с неназванными элементами списка.

Вот функция, которую я написал:

 toXLS <- function(myList,myFile) {

    #Initialize output workbook
    require(xlsx)
    wb <- createWorkbook()
    for (name in names(myList)) {
        createSheet(wb, sheetName=name)
    }
    
    #Write blank workbook to file
    saveWorkbook(wb, myFile)

    #Write output data to saved workbook
    for (name in names(myList)) {
        write.xlsx(myList[[name]], myFile, sheetName=name)
    }
}

myList <- list(a=data.frame(1,2,3),b=data.frame('a','b','c'),d=data.frame('01-01-1900'))
toXLS(myList,paste(getwd(),'/output.xlsx',sep=''))
  

Он работает нормально, но перезаписывает выходную рабочую книгу при каждом вызове write.xlsx . Как вставить фрейм данных в виде листа в рабочую книгу?

Я не женат на пакете xlsx, но, похоже, он предоставляет хороший интерфейс для файлов Excel с наименьшими затратами на настройку. Я открыт и для других хороших вариантов.

Ответ №1:

Сначала создайте файл Excel:

 wb <- createWorkbook()
saveWorkbook(wb, 'output.xlsx')
  

Затем добавьте каждую книгу:

 lapply(names(myList), function(x) write.xlsx(myList[[x]], 'output.xlsx', sheetName=x, append=TRUE))
  

Ответ №2:

Использовать append = TRUE при вызове write.xlsx .

Комментарии:

1. Как мне перезаписать существующий файл, А ЗАТЕМ добавить к нему именованные листы?

2. Когда я запускаю приведенный выше код с изменением append = TRUE , я получаю следующую ошибку Error in .jcall(wb, "Lorg/apache/poi/ss/usermodel/Sheet;", "createSheet", : java.lang.IllegalArgumentException: The workbook already contains a sheet of this name