#r #readxl
#r #readxl
Вопрос:
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. На самом деле это не
readxl
проблема, а проблема в том, как передавать аргументы вmap
функциях. Вы можете использовать нотацию формулы вокруг функции. В последнем блоке вы переходитеpath = path
к функции, которая не принимает аргумент с именемpath
Ответ №1:
Мы можем сделать это с помощью анонимного вызова функции с ~
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)
Комментарии:
1. идеальное решение!