Импорт всех листов файла ODS в R с сохранением имени листов - PullRequest
0 голосов
/ 01 мая 2020

У меня есть этот LibreOffice Cal c (.ods) файл ( скачать ).

Я хочу импортировать все листы этого документа. При импорте я создам список, где каждый элемент списка будет одним листом. И я хотел бы, чтобы имя элементов списка сохраняло исходное имя листов в файле ODS.

Я создал этот код:

  library(readODS)
  library(dplyr)
  library(purrr)
  library(tidyr)

  path <- "example.ods"

  mylist <- path %>%
    ods_sheets() %>%
    set_names() %>%
    map(read_ods, skip = 1, path = path)

При запуске этого кода я получаю ошибку с помощью функции set_names():

Error in set_names(.) : 1 argument passed to 'names<-' which requires 2

Как решить эту проблему, чтобы создать список с элементами, названными исходными листами?

1 Ответ

1 голос
/ 01 мая 2020

Поскольку я не хочу загружать случайный файл с Google Диска, я создал для него собственный пример файла ODS с двумя листами "foo" и "bar", которые выглядят так:

foo

a b
1 2
3 4

bar

a b
7 6
5 4

Итак, у вас было несколько проблем с вашим кодом. Вы споткнулись на свой первый, что вам нужно два аргумента для set_names(). Другая ваша проблема заключается в том, что вы не указали и .x , и .f для map(). Мы можем решить эти проблемы, используя промежуточный шаг назначения следующим образом:

library(readODS)
library(dplyr)
library(purrr)
library(tidyr)

path <- "test.ods"

sheets <- ods_sheets(path)
mylist <- map(seq_along(sheets), read_ods, path = path) %>%
    set_names(sheets)
mylist

$foo
  a b
1 1 2
2 3 4

$bar
  a b
1 7 6
2 5 4
...