使用 rlang 以编程方式创建命名列表
Use rlang to create a named list programmatically
从开始,你可以做到
a <- "item_name"
b <- "item_value"
list2(!!a := b)
当有多个元素时,我如何逐项完成同一件事?
a <- c("item_name1","item_name2")
b <- c("item_value1","item_value2")
我不太确定你在问什么。
这是你想要的吗?
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"
structure(as.list(b), names=a)
如果需要设置多个名字,rlang包有set_names
功能
a <- c("item_name1","item_name2")
b <- c("item_value1","item_value2")
b %>% rlang::as_list() %>% rlang::set_names(a)
如果您正在寻找一种 "tidyeval" 的处理方式,请考虑以下经验法则:其中 !!
用于单个元素,!!!
用于它扩展到多个元素。
list2( !!!setNames(b, a) )
# $item_name1
# [1] "item_value1"
#
# $item_name2
# [1] "item_value2"
从
a <- "item_name"
b <- "item_value"
list2(!!a := b)
当有多个元素时,我如何逐项完成同一件事?
a <- c("item_name1","item_name2")
b <- c("item_value1","item_value2")
我不太确定你在问什么。
这是你想要的吗?
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"
structure(as.list(b), names=a)
如果需要设置多个名字,rlang包有set_names
功能
a <- c("item_name1","item_name2")
b <- c("item_value1","item_value2")
b %>% rlang::as_list() %>% rlang::set_names(a)
如果您正在寻找一种 "tidyeval" 的处理方式,请考虑以下经验法则:其中 !!
用于单个元素,!!!
用于它扩展到多个元素。
list2( !!!setNames(b, a) )
# $item_name1
# [1] "item_value1"
#
# $item_name2
# [1] "item_value2"