R语言中如何使用str_c()或paste()拼接字符串为列表对象命名
问题原因
R 的list()构造语法中,等号左侧的内容默认作为字面量元素名处理,不会执行求值运算,因此直接把str_c()/paste()这类函数调用放在等号左侧作为键名时,无法得到预期的动态拼接名称。
实现方案
下面提供两种常用的实现方式,均可以满足动态名称追加列表元素的需求:
方法1:通过setNames()动态设置列表名(适合批量追加多个元素的场景)
setNames()函数会对传入的名称参数做求值运算,可以直接搭配append()使用:
library(stringr) # 构造测试数据 params <- tibble(col1=c(1,2,3), col2=c("a", "b", "c")) all_output <- list() # 动态拼接名称并追加 all_output <- append(all_output, setNames(list(params), str_c("this_", "does_", "now_", "work")))
方法2:双括号索引直接赋值(适合追加单个元素的场景,写法更简洁)
先计算得到动态名称,直接通过列表的双括号索引赋值即可,无需调用append():
library(stringr) # 构造测试数据 params <- tibble(col1=c(1,2,3), col2=c("a", "b", "c")) all_output <- list() # 先计算动态名称再赋值 dynamic_name <- str_c("this_", "also_", "works") all_output[[dynamic_name]] <- params
两种方法执行完成后,调用names(all_output)即可看到动态拼接生成的列表元素名。
内容的提问来源于stack exchange,提问作者Rincewind
相关产品推荐
相关产品推荐

