如何在R语言中通过循环创建A1至A20的变量列表?
创建包含A1到A20命名元素的列表的正确写法
你的代码问题出在两处:
Ai是未定义的变量,R无法识别这个符号对应的值;- 给列表的命名元素赋值时,单括号
[ ]会返回子列表结构,通常用双括号[[ ]]直接赋值单个元素更合适。
根据你的需求,这里提供两种常见场景的正确实现:
场景1:创建元素名为A1-A20,值对应1-20的列表
循环写法
s <- list() for (i in 1:20) { name <- paste0("A", i) # paste0是paste(sep="")的简写,更高效 s[[name]] <- i }
更简洁的向量化写法(推荐)
不用循环,一行就能搞定:
s <- setNames(as.list(1:20), paste0("A", 1:20))
场景2:将环境中已有的A1-A20变量存入列表
如果你的工作环境里已经定义了A1、A2……A20这些变量,用下面的方法:
循环写法
s <- list() for (i in 1:20) { name <- paste0("A", i) s[[name]] <- get(name) # get()通过变量名字符串获取对应值 }
简洁写法(推荐)
s <- mget(paste0("A", 1:20))
补充说明
paste0()是R中拼接字符串的常用函数,默认分隔符为空,比paste(sep="")更简洁;setNames()可以快速给向量/列表的元素批量命名;mget()会根据传入的变量名字符串列表,批量获取对应变量并返回一个命名列表,是处理这类需求的最优解。
内容的提问来源于stack exchange,提问作者acram kabir
相关产品推荐
相关产品推荐

