Я хочу узнать больше о пакете purrr . Я вижу некоторые нюансы в непротиворечивости, но я борюсь с гибкостью для произвольных проблем. Мне всегда нравились гибкость и относительная простота использования Map
. Я читал о pmap
, но работать с Map
кажется более неловким для ситуации, когда вы хотите передать объект в следующую часть и иметь n списков зацикливания этого объекта совместно друг с другом.
Ниже приведен минимальный пример. Код передает mtcars
в цикл (в данном случае Map
), который, в свою очередь, перебирает функции записи и расширения файлов и использует mtcars
из предыдущей цепочки для записи файла. Как я мог написать этот код, используя подход purrr / tidyverse?
Я ценю, что могу просто передать c('fst', 'csv')
и построить функции расширения и записи из одного вектора, используя match.call
. Этот MWE предназначен для демонстрации необходимости передавать 2 или более списков / векторов по объекту, передаваемому по цепочке (этот объект в некотором смысле статичен).
library(tidyverse)
library(fst)
mtcars %>%
{Map(function(fun, ext) {
fun(., sprintf('mtcars.%s', ext))
},
list(fst::write_fst, readr::write_csv),
list('fst', 'csv')
)} %>%
invisible()