readxl Перебирать несколько листов в книге, передавая дополнительные аргументы - PullRequest
2 голосов
/ 19 апреля 2019

Readxl предоставляет хорошее решение для итерации по нескольким листам и присваивает им имена, что прекрасно работает.

https://readxl.tidyverse.org/articles/articles/readxl-workflows.html

path <- readxl_example("datasets.xlsx")
path %>% 
 excel_sheets() %>% 
 set_names() %>% 
 map(read_excel, path = path) 

Однако мне нужно передать дополнительные аргументы в read_excel.Таким образом, как показано ниже, желаемый результат.

read_excel("datasets.xlsx",col_names = FALSE, skip = 1)

Решения, которые я пробовал

path <- readxl_example("datasets.xlsx")
path %>% 
 excel_sheets() %>% 
 set_names() %>% 
 map(read_excel(col_names = FALSE, skip = 1), path = path) 

и

read_excel_func <- function(y){
 readxl::read_excel(y, col_names = FALSE, skip = 1)
}

path <- readxl_example("datasets.xlsx")
path %>% 
 excel_sheets() %>% 
 set_names() %>% 
 map(read_excel_func, path = path)

1 Ответ

4 голосов
/ 19 апреля 2019

Мы можем сделать это, используя анонимный вызов функции с ~

library(readxl)
library(dplyr)
path %>% 
 excel_sheets() %>% 
   set_names() %>% 
   map(~ read_excel(.x, col_names = FALSE, skip = 1, path = path))

Или просто передать аргументы в map как path

path %>% 
  excel_sheets() %>% 
  set_names() %>% 
  map(read_excel, col_names = FALSE, skip = 1, path = path)
...