При выполнении итерации map
автоматически подставляется содержимое каждого элемента, поэтому вы вызываете flatten_chr
для числового вектора, который выдает ошибку.Удаление вызова flatten_chr
на самом деле ничего не исправит, потому что имена не передаются map
, поэтому вы просто получите NULL
при вызове функций.
Хороший подход заключается визмените фабричную функцию, чтобы она принимала два параметра, чтобы вы могли перебирать как содержимое, так и имена.purrr::imap
выполняет эту итерацию автоматически, поэтому вы можете написать
library(purrr)
create_function <- function(n, x){
function(){
rep(x, n)
}
}
list(one = 1,two = 2,three = 3) %>%
imap(create_function) %>%
map(invoke) # call each function in list
#> $one
#> [1] "one"
#>
#> $two
#> [1] "two" "two"
#>
#> $three
#> [1] "three" "three" "three"