使用rlang以编程方式创建命名列表

时间:2018-10-09 11:45:07

标签: r rlang

http://s.ytimg.com/yts/jsbin/html5player-en_US-vflycBCEX.js开始,您可以

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

list2(!!a := b)

当元素多于一个时,我如何逐项完成同一件事?

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

4 个答案:

答案 0 :(得分:1)

structure(as.list(b), names=a)

答案 1 :(得分:1)

如果您正在寻找一种“ tidyeval”的处理方式,请考虑以下经验法则:!!用于单个元素,!!!是其对多个元素的扩展元素。

list2( !!!setNames(b, a) )
# $item_name1
# [1] "item_value1"
#
# $item_name2
# [1] "item_value2"

答案 2 :(得分:0)

我不确定您要问什么。

这是你的追求吗?

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"

答案 3 :(得分:0)

如果需要设置多个名称,则rlang程序包具有set_names函数

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

b %>% rlang::as_list() %>% rlang::set_names(a)