R语言动态指定列表元素名 间接定义列表对象实现方法
R动态构造带变量名列表的实现方法
list()的命名参数等号左侧不会自动解析变量值,只会直接识别输入的字面符号作为元素名,因此直接运行list(a = b)会得到名为a的元素,无法读取变量a中存储的字符串作为名称。以下是几种无需安装第三方包的基础R实现方案:
方法1:
setNames()实现(推荐,简洁通用)
将待存入的值组成列表、存储目标名称的变量依次传入setNames即可,单元素、多元素场景都适用:a <- "name" b <- 3 res <- setNames(list(b), a)运行结果符合预期:
> res $name [1] 3构造多元素列表时,只要保证名称向量和值列表顺序一一对应即可:
dyn_names <- c("name", "age", "score") dyn_vals <- list("Zhang", 22, 98) res_multi <- setNames(dyn_vals, dyn_names)方法2:赋值
names()属性实现(逻辑直观,适合分步构造)
先创建存储所有值的列表,再给列表的names属性赋值为存储名称的变量:a <- "name" b <- 3 res <- list(b) names(res) <- a运行效果和方法1完全一致。
方法3:
do.call()实现(适合批量传参场景)
先构造带名称的参数列表,再通过do.call调用list生成最终结果:a <- "name" b <- 3 args <- list(b) names(args) <- a res <- do.call(list, args)
补充:如果使用tidyverse生态,可借助rlang的元编程语法
list(!!a := b)实现同等效果,但该写法不属于基础R语法,不熟悉元编程优先选择前两种方案。
内容的提问来源于stack exchange,提问作者JeremyC
相关产品推荐
相关产品推荐

