Сохраните содержимое книги для разделения data.frames в списке

Я пытаюсь прочитать книгу Excel с неизвестным количеством листов и сохранить каждый лист как часть переменной (результат [1] дает лист 1, результат [2] дает лист 2 и т. д.). Я начал пытаться найти способ сделать это с помощью пакета XLConnect (который я смог заставить правильно работать в Linux). Я остановился, когда понял, что нарушил почти все существующие правила R... У кого-нибудь есть лучшее решение, использующее пакет XLConnect?

require(XLConnect)

demoExcelFile <- system.file("demoFiles/multiregion.xlsx", package = "XLConnect")

endloop<<-F
x<<-1
result<<-NULL
while(!endloop){
  result[x] <<- tryCatch({
    readWorksheetFromFile(demoExcelFile,sheet=x)
    x<<-x+1
  }, error = function(e) {
    endloop<<-T
  })
}

Примечание. Я открыт для использования других пакетов, просто мне не удалось найти другой, надежно работающий на 64-разрядной версии Linux Mint.


person Rilcon42    schedule 26.10.2017    source источник


Ответы (2)


Используйте пакет readxl, в котором есть функция для вывода имен листов.

library(readxl)
library(purrr)

# get the sheet names
sheetnames  <- excel_sheets("path/to/myfile.xlsx")

# loop through them and read each sheet into an item in a list.
# alternatively, use lapply() instead of map()
listofsheets <- map(sheetnames, ~ read_excel("path/to/myfile.xlsx", sheet = .x))
person crazybilly    schedule 26.10.2017

Я бы рекомендовал использовать readxl от tidyverse. Вы можете написать что-то вроде:

library(readxl)
sheets <- excel_sheets("insert_filepath/workbook.xlsx")

data <- list()
for (i in 1:length(sheets)) {
  data[[i]] <- read_excel("insert_filepath/workbook.xlsx", sheet = sheets[i])
}

Поскольку у меня нет вашего файла Excel, я не могу точно воспроизвести ваши данные. Но это должно быть общее решение, которое находит все имена листов в вашем файле Excel, а затем перебирает каждый лист и считывает их в список под названием «данные».

person cody_stinson    schedule 26.10.2017