Я пытаюсь создать функцию, которая читает все листы в книге Excel, используя readxl::read_excel
, и связывает их в один фрейм данных, и позволяет мне передавать дополнительные аргументы в read_excel
. Я могу нормально выполнить первую часть, но не вторую.
library(magrittr)
# example excel workbook with multiple sheets
path <- readxl::readxl_example("datasets.xlsx")
# function with simple forwarding
read_all <- function(path, ...) {
path %>%
readxl::excel_sheets() %>%
rlang::set_names() %>%
purrr::map_df(~ readxl::read_excel(path = path, sheet = .x, ...))
}
# errors with and without additional arguments
read_all(path)
read_all(path, skip = 5)
Мне нужно вернуть один файл, вместо этого я получаю сообщение об ошибке:
Error: Can't guess format of this cell reference: iris
In addition: Warning message: Cell reference follows neither the A1 nor R1C1 format. Example: iris NAs generated.
Без передачи аргументов функция работает нормально:
# Function works without passing extra params
read_all_0 <- function(path) {
path %>%
readxl::excel_sheets() %>%
rlang::set_names() %>%
purrr::map_df(~ readxl::read_excel(path = path, sheet = .x))
}
read_all_0(path)
Передача аргументов отлично работает в простой функции без purrr::map_df
read_test <- function(path, ...) {
path %>% readxl::read_excel(...)
}
read_test(path, skip = 10)
function(x) {}
вместо обозначения функции lamda~
. Если ошибка по-прежнему отображается (2), опустите вертикальную черту послеset_names
и используйте вместо нее промежуточную переменную. - person TimTeaFan   schedule 05.10.2019doc <- path %>% readxl::excel_sheets() %>% rlang::set_names()
иpurrr::map_df(doc, function(x) {readxl::read_excel(path = path, sheet = .x, !!!args)})
} `` - person Lief Esbenshade   schedule 05.10.2019function(x)
, вам нужно заменить.x
наx
. См. Мой ответ ниже. - person TimTeaFan   schedule 05.10.2019