Часто я генерирую списки тиблей, которые затем хочу перенаправить в вызов purrr::map
.Довольно часто я хочу добавить столбец идентификатора к каждому фрагменту, а затем соединить их вместе.Я ищу способ не создавать промежуточные переменные, которые загрязняют мою глобальную среду, просто чтобы иметь возможность использовать seq_along для добавления столбца id.
Загрузить библиотеку:
library(tidyverse)
Создать представление:
reprex_list <- list(Aleena = structure(list(
name = "Ratts Tyerell", height = 79L,
mass = 15, hair_color = "none", skin_color = "grey, blue",
eye_color = "unknown", birth_year = NA_real_, gender = "male",
homeworld = "Aleen Minor", films = list("The Phantom Menace"),
vehicles = list(character(0)), starships = list(character(0))
), class = c(
"tbl_df",
"tbl", "data.frame"
), row.names = c(NA, -1L)), Besalisk = structure(list(
name = "Dexter Jettster", height = 198L, mass = 102, hair_color = "none",
skin_color = "brown", eye_color = "yellow", birth_year = NA_real_,
gender = "male", homeworld = "Ojom", films = list("Attack of the Clones"),
vehicles = list(character(0)), starships = list(character(0))
), class = c(
"tbl_df",
"tbl", "data.frame"
), row.names = c(NA, -1L)), Cerean = structure(list(
name = "Ki-Adi-Mundi", height = 198L, mass = 82, hair_color = "white",
skin_color = "pale", eye_color = "yellow", birth_year = 92,
gender = "male", homeworld = "Cerea", films = list(c(
"Attack of the Clones",
"The Phantom Menace", "Revenge of the Sith"
)), vehicles = list(
character(0)
), starships = list(character(0))
), class = c(
"tbl_df",
"tbl", "data.frame"
), row.names = c(NA, -1L)))
Отсюда мне нужно сгенерировать промежуточную переменную в моей глобальной среде и запуститьСнова отобразим карту следующим образом:
species_id <- names(reprex_list) # don't want to have to break the pipe and add this to my blobal environment
map(.x = seq_along(reprex_list), .f = ~reprex_list[[.x]] %>%
dplyr::mutate(species = species_id[[.x]])) %>%
map(.f = ~ .x %>% mutate_all(as.character)) %>%
purrr::reduce(full_join) %>%
type_convert()
Глупо, но вместо этого мне хотелось бы:
reprex_list %>% # Sometimes this is piped in from many previous lines of code so I don't want to have to assign this to a separate variable to be able to carry on.
map(.x = seq_along(.), .f = ~ .[[.x]] %>% dplyr::mutate(species = names(.)[[.x]])) %>%
map(.f = ~ .x %>% mutate_all(as.character)) %>%
purrr::reduce(full_join) %>%
type_convert()
Но последнее не работает.Теперь очевидно, что лишние хлопоты здесь минимальны, но иногда у меня уже было несколько строк кода, прежде чем я сгенерирую промежуточный список, который я затем должен назначить отдельной переменной.А затем снова начните пиппинг, что, я уверен, может быть сделано в одном фрагменте кода, но я пока не нашел для этого пути.Есть идеи?Спасибо.