Используйте Rlang для создания именованного списка программно - PullRequest
0 голосов
/ 09 октября 2018

из Построение списков с использованием инструментов tidyeval (например, `!!` и `: =`) , вы можете сделать

a <- "item_name"
b <- "item_value"

list2(!!a := b)

Как я могу выполнить то же самое поэлементно, когдатам более одного элемента?

a <- c("item_name1","item_name2")
b <- c("item_value1","item_value2")

Ответы [ 4 ]

0 голосов
/ 11 октября 2018

Если вы ищете конкретный способ ведения дел, подумайте о следующем эмпирическом правиле: где !! используется для одного элемента, !!! является его расширением для нескольких элементов.

list2( !!!setNames(b, a) )
# $item_name1
# [1] "item_value1"
#
# $item_name2
# [1] "item_value2"
0 голосов
/ 09 октября 2018
structure(as.list(b), names=a)
0 голосов
/ 09 октября 2018

Если вам нужно установить несколько имен, пакет rlang имеет функцию set_names

a <- c("item_name1","item_name2")
b <- c("item_value1","item_value2")

b %>% rlang::as_list() %>% rlang::set_names(a)
0 голосов
/ 09 октября 2018

Я не совсем уверен, что вы спрашиваете.

Это то, что вы ищете?

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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...