Функция для экспорта нескольких данных из списка в отдельный лист Excel

#r #excel #openxlsx

#r #excel #openxlsx

Вопрос:

Я пытаюсь создать функцию для экспорта нескольких элементов списка в книгу Excel с разными листами.

Я получаю сообщение об ошибке:

«Ошибка в if (nchar(SheetName)> 31) {: отсутствует значение, где требуется TRUE / FALSE».

Моя попытка приведена ниже:

 library("openxlsx")

data <- list("ABCD", "EFGH")
names(data) <- c("X", "Y")

#x = list, y = file name
createWorksheet <- function(x, y){
  wb <- createWorkbook() 
  for(i in x){
    addWorksheet(wb, names(x)[i])
    writeData(wb, sheetName = names(x)[i], x[[i]])
    saveWorkbook(wb, file = y, overwrite = TRUE)
  }
}
createWorksheet(data, "data.xlsx")
  

Есть идеи, что не так?

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

1. Вам нужно for(i in seq_along(x)) вместо for(i in x) ?

2. Вы правы. Я думал, что циклы for будут просто предполагать 1:length(x) для 2-го аргумента.

Ответ №1:

С помощью Аллана:

 library("openxlsx")

data <- list("ABCD", "EFGH")
names(data) <- c("X", "Y")

#x = list, y = file name
createWorksheet <- function(x, y){
  wb <- createWorkbook() 
  for(i in seq_along(x)){
    addWorksheet(wb, names(x)[i])
    writeData(wb, sheet = names(x)[i], x[[i]])
    saveWorkbook(wb, file = y, overwrite = TRUE)
  }
}
createWorksheet(data, "data.xlsx")