Используйте rlang для создания именованного списка программно
Из Построения списков с использованием инструментов tidyeval (таких как `!!` и `: =`), вы можете сделать
a <- "item_name"
b <- "item_value"
list2(!!a := b)
Как я могу выполнить одну и ту же вещь поэлементно, когда существует более одного элемента?
a <- c("item_name1","item_name2")
b <- c("item_value1","item_value2")
4 ответа
Решение
Если вы ищете конкретный способ ведения дел, подумайте о следующем эмпирическом правиле: где !!
используется для одного элемента, !!!
это расширение нескольких элементов.
list2( !!!setNames(b, a) )
# $item_name1
# [1] "item_value1"
#
# $item_name2
# [1] "item_value2"
Если вам нужно установить несколько имен, пакет rlang имеет set_names
функция
a <- c("item_name1","item_name2")
b <- c("item_value1","item_value2")
b %>% rlang::as_list() %>% rlang::set_names(a)
Я не совсем уверен, что вы спрашиваете.
Это то, что вы после?
map2(a, b, list2)
#[[1]]
#[[1]][[1]]
#[1] "item_name1"
#
#[[1]][[2]]
#[1] "item_value1"
#
#
#[[2]]
#[[2]][[1]]
#[1] "item_name2"
#
#[[2]][[2]]
#[1] "item_value2"
Или возможно это?
map2(a, b, ~list2(!!.x := .y))
#[[1]]
#[[1]]$item_name1
#[1] "item_value1"
#
#
#[[2]]
#[[2]]$item_name2
#[1] "item_value2"