在R中迭代将向量作为行添加至矩阵的for循环实现
批量将函数输出写入矩阵的实现过程
我编写了AutoCorr()函数,输入ID后会返回包含目标统计量的长度为16的向量,需要将每个ID对应的向量作为行,写入一个43×16的矩阵output_cisb中。
AutoCorr()函数输出示例
> AutoCorr("1182") [1] "1182" "4.04251700680272" "0.245592563077202" "4.01360544217687" [5] "0.394458659738509" "1.92857142857143" "0.258863495453396" "0.00549450549450549" [9] "0.0402062637741741" "-0.0299525504151839" "-0.0760215053763439" "-0.00118963486454654" [13] "-0.0160279139947191" "0.46824093004317" "0.300800729491312" "-0.429796668526319"
低效的手动赋值方式
手动逐个给矩阵行赋值效率极低,以下是前5行的示例:
output_cisb[1,] <- AutoCorr("1001") output_cisb[2,] <- AutoCorr("1002") output_cisb[3,] <- AutoCorr("1041") output_cisb[4,] <- AutoCorr("1042") output_cisb[5,] <- AutoCorr("1052")
最初错误的嵌套for循环
尝试用嵌套循环实现,但无法正常运行:
ID_cisb<-file_path_sans_ext(basename(filenames_cisb)) # 生成待传入AutoCorr()的ID向量 for (i in nrow(output_cisb)){ for (j in ID_cisb){ output_cisb[i,] <- AutoCorr(j) } }
错误原因:外层循环for (i in nrow(output_cisb))仅会执行一次(nrow()返回单个数值),内层循环会把所有ID的结果依次覆盖到同一行,最终矩阵只有最后一个ID的结果,其余行未被正确赋值。
正确的for循环实现
通过遍历ID的索引,实现每个ID的结果对应写入矩阵的行:
ID_cisb<-file_path_sans_ext(basename(filenames_cisb)) for (i in seq_along(ID_cisb)){ # 遍历索引 # print (i) output_cisb[i,] <- AutoCorr(ID_cisb[i]) }
内容的提问来源于stack exchange,提问作者Ran Yan
相关产品推荐
相关产品推荐

