R语言循环创建带序号命名矩阵时出现赋值错误如何解决
报错原因
- R 中
assign()函数本身已内置赋值逻辑,不需要额外搭配赋值运算符<-使用。原有写法将assign(paste0("M", u))放在<-左侧,本质是尝试把矩阵直接赋值给paste0()生成的字符串本身,R 不支持将字符串表达式作为赋值左值,因此触发非法赋值目标的报错。
修正方案
方案1:生成独立命名的全局矩阵
使用assign()的标准语法,第一个参数传入变量名的字符串形式,第二个参数传入要赋值的矩阵对象即可:
for (u in 1:3) { assign(paste0("M", u), matrix(nrow = 10, ncol = 10)) }
运行后会在当前全局环境生成M1、M2、M3三个 10×10 的空矩阵。
方案2:更易维护的列表存储方案
如果没有强制要求生成独立的全局变量,更推荐用列表收纳所有生成的矩阵,既避免污染全局环境,也方便后续批量处理:
# 初始化空列表存储矩阵 M_collection <- list() for (u in 1:3) { M_collection[[u]] <- matrix(nrow = 10, ncol = 10) } # 调用时通过索引取值,例如获取第一个矩阵 M_collection[[1]]
内容的提问来源于stack exchange,提问作者Agustín Correa
相关产品推荐
相关产品推荐

