Запишите xlsx файлы из списка в текущем рабочем каталоге с помощью purrr: map - PullRequest
0 голосов
/ 11 мая 2018

Я пытаюсь записать файлы Excel из списка в моем текущем рабочем пространстве R, используя purrr :: map.Я хотел бы использовать имя каждого списка в качестве имени файла Excel (например: name_1.xlsx, name_2.xlsx).Как мне получить purrr: map для этого?

library(tidyverse)
library(writexl)

l2 <- list(
  tibble(x = 1:5, y = 1, z = x ^ 2 + y),
  tibble(x = 2:6, y = 3, z = x ^ 2 + y)
  )

names(l2) <- c("name_1", "name_2")

Я пробовал эти два решения, но они не работают должным образом.

map(l2, write_xlsx, str_c(names(l2), ".xlsx"))

map(l2, ~write_xlsx(l2, path = str_c(names(l2), ".xlsx")))

1 Ответ

0 голосов
/ 11 мая 2018

Я думаю, вам нужно map2 для того, чтобы поставить l2 & names(l2) на write_xlsx. Здесь .x относится к l2 и .y относится к names(l2)

map2(l2, names(l2), ~ write_xlsx(.x, path = str_c(.y, ".xlsx")))

$`name_1`
[1] "name_1.xlsx"

$name_2
[1] "name_2.xlsx"

Редактировать: вы также можете использовать walk2, pmap & pwalk

walk2(l2, names(l2), ~ write_xlsx(.x, path = str_c(.y, ".xlsx")))

# ..1 refers to l2 & ..2 refers to names(l2)
pmap(list(l2, names(l2)), ~ write_xlsx(..1, path = str_c(..2, ".xlsx")))

pwalk(list(l2, names(l2)), ~ write_xlsx(..1, path = str_c(..2, ".xlsx")))
...