如何在R语言的for循环中根据循环变量i为生成对象动态命名?
你代码运行失败的核心原因是assign函数的语法使用错误,assign不需要搭配<-赋值运算符,它的入参规则为assign("变量名", 要赋值的内容),你原来的写法同时使用assign和<-属于语法错误。
方案1:保持生成独立matrix_i变量的需求
修改后代码如下,注意提前加载reshape2包,melt函数依赖该包才能正常运行:
# 提前加载依赖包 library(reshape2) for (i in 1996:2020) { nacimientos <- read.csv(paste0("C:/Users/.../Natalidad ", i, "_p.csv"), header = TRUE, sep = ";") # 修正assign的用法,直接传入变量名和赋值内容 assign(paste0("matrix_", i), melt(table(nacimientos$ano, nacimientos$mes))) }
运行完成后即可在全局环境中直接调用matrix_1996、matrix_1997等对应年份的统计矩阵。
方案2:更推荐的列表存储方案
生成大量分散的全局变量并不便于后续批量处理,更建议把所有年份的结果存在同一个列表中管理:
library(reshape2) # 初始化存储所有结果的列表 year_matrix <- list() for (i in 1996:2020) { nacimientos <- read.csv(paste0("C:/Users/.../Natalidad ", i, "_p.csv"), header = TRUE, sep = ";") # 用年份作为列表索引,后续提取更方便 year_matrix[[as.character(i)]] <- melt(table(nacimientos$ano, nacimientos$mes)) }
使用时只需通过年份索引即可提取对应结果,比如提取2010年的矩阵用year_matrix[["2010"]],后续要批量计算、导出时也可以直接对列表做循环操作,管理效率更高。
内容的提问来源于stack exchange,提问作者Agustín Correa
相关产品推荐
相关产品推荐

